問題は、モジュールのロードでセットアップしたオブジェクトがプログラム内で使用されている場合、再コンパイルが必要になる可能性があることです。その理由は、プログラムにクラスのアセンブリの最新バージョンがない可能性があるためです。たとえば、インターフェイスの1つに新しい具象クラスを作成する場合、プラグインdllを変更するとします。これで、Injectorはそれを正常にロードしますが、プログラム内に返される場合(kernel.get(...))、プログラムにアセンブリがない可能性があり、エラーがスローされます。
私が話していることの例:
BaseAuto auto = kernel.Get<BaseAuto>();//Get from the NInjector kernel your object. You get your concrete objet and the object "auto" will be filled up (interface inside him) with the kernel.
//Somewhere else:
public class BaseModule : StandardModule
{
public override void Load(){
Bind<BaseAuto>().ToSelf();
Bind<IEngine>().To<FourCylinder>();//Bind the interface
}
}
SixCylinderと呼ばれる新しいFourCylinderを作成した場合、実際のプログラムには新しいオブジェクトへの参照がありません。したがって、PlugInからBaseModule.csをロードすると、参照で問題が発生する可能性があります。これを実行できるようにするには、この具象実装の新しいdllをプラグインとともに配布する必要があります。プラグインには、InjectorがInterfacetoConcreteクラスをロードするために必要なモジュールが含まれます。これは問題なく実行できますが、プラグインからのロード時にアプリケーション全体が存在するようになり、いくつかの点で問題が発生する可能性があります。注意してください。
ただし、プラグイン情報が必要な場合は、CodeProjectからチュートリアルを入手できます。