Ninject:可以使用多个匹配的绑定

时间:2011-09-05 22:21:30

标签: ninject

我有一个参数构造函数的依赖项。当我将动作调用超过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>();
              ...
        }

2 个答案:

答案 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时添加类似绑定的原因。所以它可能是第一次工作,并在第二次开始失败。