DIについては、MicrosoftのUnityを使用しています。 私はRapier-LOOMを使っています。依存性注入と動的アスペクトウィービングの組み合わせ
アスペクトウィーバーではファクトリメソッドWeaver.CreateInstance(System.Type)
を使用して織りオブジェクトをインスタンス化する必要があり、既存のインスタンスを織り交める方法はありません。
DIコンテナを使用すると、依存関係を解決し、注入された型のオブジェクトをインスタンス化するIUnityContainer.Resolve(System.Type)
メソッドを使用して依存関係を解決できます。
これらの2つのアプローチは明らかに競合します。 この競合を解決するには、どのような方法が推奨されますか?私がこれまで持っていた
アイデア:
- マッピングを問い合わせし、(
IUnityContainer.Registrations
プロパティを使用して)依存関係を「手動で解決します」。解決するタイプを指定して、ターゲットのマップされたタイプを見つけ、ウィーバーを使用してインスタンス化する、結合された "DI + AOP"メカニズムを作成します。 - (代わりにアクティベーターの)ウィーバーを使用してインスタンス化
IUnityContainer
インターフェイス、私の独自の実装を作成します
P.S.
私はここでオフトラックしていますが、解決されているのではなく競合が回避できる場合はお知らせください。
興味深い質問!私の最初の印象は、メソッドの呼び出しを内部UnityContainerにマップする 'AUnityContainer'の新しい実装を作成することですが、AOPファクトリメソッドを使うために' Resolve'を再実装します。しかし、人々が他のアイデアを持っているなら、私は非常に興味があります。 –
Unityが内部的にどのように動作するかを調べると、 'Resolve'を再実装することは決して簡単な作業ではなく、 'Resolve'メソッドを実行するために 'UnityContainer'によって使用されるメカニズムを再実装することもありません。 Rapier-LOOMのソースコードを確認すると、オブジェクトをインスタンス化する方法を変更することも重要ではありません...結果に達すると更新されます。 –
Unityの独自の動的傍受機能を使ってみませんか? –