IoC コンテナーを調査していますが、NInject の使用時に問題が発生しました。
インターフェイスがあり、Microsoft Unity を使用して、そのインターフェイスのいくつかのマッピング (名前のない 1 つのマッピング、既定のマッピング、およびさらに 2 つの名前付きインスタンス) を定義すると、Unity にインターフェイスを指定せずに解決するように要求すると、登録された既定の型が適切に取得されます。名前。
団結:
myContainer.RegisterType<ILogger, DefaultLogger>();
myContainer.RegisterType<ILogger, FastLogger>("fast");
myContainer.RegisterType<ILogger, DatabaseLogger>("dblogger");
var result = myContainer.Resolve<ILogger>();
ここでresult
は、タイプになりますDefaultLogger
-私が予想したように(Autofac
また、このように機能します)。
他のコンテナは異なる動作をします - いくつかは非常に奇妙な方法です。NInject は単に例外を引き起こします。
k.Bind<ILogger>().To<DefaultLogger>();
k.Bind<ILogger>().To<FastLogger>().Named("fast");
k.Bind<ILogger>().To<DatabaseLogger>().Named("dblogger");
var result = k.Get<ILogger>();
期待どおりのインスタンスを取得する代わりにDefaultLogger
、例外が発生しています。
Ninject.ActivationException は処理されませんでした
Message=ILogger のアクティベーション中にエラーが発生し
ました 複数の一致するバインディングが利用可能です。
はい - 複数のマッピングがあることは知っていますが、特に名前付きマッピングを要求していない場合、名前なしマッピングを取得すると予想していました.....
これを NInject で動作させることはできますか? または、すべてのマッピングに名前を付けて、デフォルトのケースでも名前付きマッピングを要求する必要がありますか?