9

NinjectWebCommon.RegisterServices メソッドで HttpContextBase のバインディングを作成しましたが、コントローラーまたはサービスでそれを参照しようとすると、エラー メッセージが表示されます。

バインディングは次のとおりです。

kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current)).InRequestScope();

エラーメッセージは次のとおりです。

Error activating HttpContextBase
More than one matching bindings are available.
Activation path:
 2) Injection of dependency HttpContextBase into parameter abase of constructor of type HomeController
 1) Request for HomeController

Suggestions:
 1) Ensure that you have defined a binding for HttpContextBase only once.

バインディングを削除すると、希望どおりに動作するように見えますが (HttpContextWrapper に解決されます)、これがどのように登録されるのか疑問に思っています。

4

2 に答える 2

3

Ninject.Web.Common v3.2.3.0 によってバインディングが登録されていることがわかります

単体テストでバインドをモックしようとしている場合は、最初に次のように削除する必要があります。

// WebCommonNinjectModule loads HttpContextBase. We need to remove it
var httpContextBaseBinding = kernel.GetBindings(typeof(System.Web.HttpContextBase)).FirstOrDefault();
kernel.RemoveBinding(httpContextBaseBinding);
kernel.Bind<System.Web.HttpContextBase>().ToMethod(m => httpContextBaseMock.Object);
于 2015-07-17T02:23:27.030 に答える