3

最近、ASP.NET MVC 3 アプリを Ninject 2.2 に更新しました。

以前は、メイン アプリに実装バインディングへの次のインターフェイスがありました。

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();

さらに、メイン アプリによって読み込まれている別のアセンブリに次のものがありました。

var arg = new ConstructorArgument("info", "something");
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg);

これは以前は正常に機能し、より具体的な実装 (引数を持つもの) が認識されていました。ただし、Ninject 2.2 にアップグレードすると、次のエラーが発生しました。

Error activating IMyInterface{MyClass}
More than one matching bindings are available.
Activation path:
 2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass
 1) Request for IMyInterface

Suggestions:
 1) Ensure that you have defined a binding for IMyInterface{MyClass} only once.

これを引き起こしている 2.0 から 2.2 への変更と回避策はありますか?

4

1 に答える 1

5

Ninject 2.2は、インスタンスを解決するときに一致するバインディングが1つだけ存在することを保証します。2.0は、他のバインディングがあることを無視して、最初に一致したバインディングのインスタンスを返しました。ただし、1つだけが要求された場合に複数のバインディングがあると、構成が不適切であり、意図しない動作を検出するのが困難になる可能性があります。

しかし、より具体的なものでオープンジェネリックバインディングを無効にする可能性があるはずだと思います。私は間違いなくそれを調べ、バグ修正リリースまたは次のメジャーリリースのいずれかに追加されます。

于 2011-02-17T11:52:36.187 に答える