私は現在、NInjectを使用してインターフェースを具象型にバインドし、それらをクラスに注入しています。ただし、これはランタイムの問題であることを理解しています。私には、誰かが私のアプリケーションの動作を変更したい場合、それは攻撃のポイントのように思えます。
依存性注入 IoC をコンパイル時に移行できるようにするものはありますか (読み取り: ビルド後の IL ウィービング/置換)。
詳しく説明する
私のコードでは、バインディングをセットアップします
Bind<IFoo>().To<Foo>()
Bind<Bar>().ToSelf().InSingletonScope();
付きFoo(Bar dependency)
アプリケーションのルート (起動時) でグラフを解決します
var foo = kernel.Get<IFoo>();
サービスロケーターがないと仮定します(とにかくアンチパターンですよね? )。だからもう使い物にならkernel
ない。
今、私は、カーネルの解決エンジンをインスタンシエーター、または定数/シングルトンへの参照などに置き換える「ビルド後のリリースコンパイル」が必要です。
var foo = kernel.Get<IFoo>();
実際、最終ビルド段階で IL を交換すると、次のようになります。
var bar = new Bar();
var foo = new Foo(bar);
また、NInject への参照はもうありません。
この質問に対する私の論理的根拠は、Fodyを使用してすべての PropertyChanged レイザーを IL Weave しているということです。