私は現在、NInjectを使用して、コンポジットタイプにインターフェイスをバインドし、それらをクラスに注入します。しかし、これは実行時の問題だと私は理解しています。誰かが自分のアプリケーションの振る舞いを変えたいと思えば、それは私にとっては攻撃のように思えます。コンパイル時/ビルド後の依存性注入IoC?
コンパイル時に依存性注入IoCを移行することができるものはありますか(Read:ビルド後IL織り/置換)? (起動時に)自分のアプリケーションのルートにctorのFoo(Bar dependency)
で
Bind<IFoo>().To<Foo>()
Bind<Bar>().ToSelf().InSingletonScope();
を結合私のコードのIセットアップで
を詳しく説明し
私はグラフを解決する
var foo = kernel.Get<IFoo>();
サービスロケータがないとします。(anti-pattern anyway right?)です。だから私はもうkernel
のための使用がありません。
今は、カーネルの解決エンジンをinstanciator、または定数/シングルトンなどの参照に置き換える "ビルド後のリリースコンパイル"をしたいと思います。実際には
var foo = kernel.Get<IFoo>();
、私の最終ビルドの段階でILを交換した後、それは次のようになります。
var bar = new Bar();
var foo = new Foo(bar);
そしてNInjectへの参照はもうありません。
私はFodyをILに使用しています。すべてのPropertyChangedライザーを織り、Dependency Injectionのために同様のことを実行できるかどうかは疑問です。
Ninject依存関係の登録は、XMLまたはコードで行われていますか? –
コンパイル時の注入についてもっと詳しく説明できますか? –
あなたのDIの設定は、モジュールを介してコードで行われます。したがって、実行時にDIの接続が発生しても、コンパイル時の安全性はすでに得られます。しかし、私たちがあなたが進んでいる問題を見れば、私はDIが実行時に発生しますが、私はコンパイル時にそれが起こるようにしたいと思っています**、なぜあなたは最初にDependency Injectionを使いたいでしょうか? ?モジュールを削除してインスタンスやファクトリを実装に手動で割り当てるだけで、実行時のポイント*がなくなります*。私にとってDIを使用する理由の半分は、ランタイム設定を取得することです – Grofit