2011-09-05 57 views
0

我有一個與參數構造函數的依賴關係。當我比1X調用操作多,它表明這個錯誤:Ninject:有多個匹配的綁定可用

Error activating IValidationPurchaseService More than one matching bindings are available. Activation path:

1) Request for IValidationPurchaseService

Suggestions:

1) Ensure that you have defined a binding for IValidationPurchaseService only once.

 public ActionResult Detalhes(string regionUrl, string discountUrl, DetalhesModel detalhesModel) 
     { 
       var validationPurchaseDTO = new ValidationPurchaseDTO {...} 

       KernelFactory.Kernel.Bind<IValidationPurchaseService>().To<ValidationPurchaseService>() 
            .WithConstructorArgument("validationPurchaseDTO", validationPurchaseDTO) 
            .WithConstructorArgument("confirmPayment", true); 

       this.ValidationPurchaseService = KernelFactory.Kernel.Get<IValidationPurchaseService>(); 
       ... 
     } 
+1

'KernelFactory.Kernel.Bind'?在ASP.NET MVC控制器操作中?哦,我的...爲什麼你使用這個服務定位模式,而不是依賴注入? –

回答

0

我不知道什麼是你想通過你所引用的代碼來實現。由於您不止一次綁定了相同的服務,所以引發錯誤,因此當您嘗試解析它時,它不能選擇一個(相同)綁定在另一個上。這不是DI Container應該如何操作的方式。在你的例子中,你根本沒有得到你的DI的優勢。您可以替換代碼:

KernelFactory.Kernel.Bind<IValidationPurchaseService>().To<ValidationPurchaseService>() 
           .WithConstructorArgument("validationPurchaseDTO", validationPurchaseDTO) 
           .WithConstructorArgument("confirmPayment", true); 

    this.ValidationPurchaseService = KernelFactory.Kernel.Get<IValidationPurchaseService>(); 

有了這個:

this.ValidationPurchaseService = new ValidationPurchaseService(validationPurchaseDTO:validationPurchaseDTO, confirmPayment:true) 

如果你能解釋一下你正在努力實現什麼用ninject在這種情況下社會將能夠進一步幫助。

0

您的KernelFactory可能會在每次連續調用控制器時返回相同的內核(單例)。這就是爲什麼每次點擊激活此控制器的URL時都要添加類似的綁定。所以它可能是第一次工作,並在第二次後開始失敗。