我有一个参数构造函数的依赖项。当我将动作调用超过1x时,会显示以下错误:
激活IValidationPurchaseService时出错 可以使用多个匹配的绑定。 激活路径:
1)请求IValidationPurchaseService
建议:
1)确保您只为IValidationPurchaseService定义了一次绑定。
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>();
...
}
答案 0 :(得分: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解释您想要实现的目标,社区将能够进一步提供帮助。
答案 1 :(得分:0)
您的KernelFactory可能会在每次连续调用控制器时返回相同的内核(单例)。这就是每次点击激活此控制器的URL时添加类似绑定的原因。所以它可能是第一次工作,并在第二次开始失败。