开发者

Ninject: More than one matching bindings are available

I have a dependency with parameters constructor. When I call the action more than 1x, it show this error:

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&l开发者_如何学运维t;IValidationPurchaseService>().To<ValidationPurchaseService>()
                                    .WithConstructorArgument("validationPurchaseDTO", validationPurchaseDTO)
                                    .WithConstructorArgument("confirmPayment", true);

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


I'm not sure what are you trying to achieve by the code you cited. The error is raised because you bind the same service more than once, so when you are trying to resolve it it can't choose one (identical) binding over another. This is not how DI Container is supposed to be operated. In your example you are not getting advantage of your DI at all. You can replace your code:

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

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

With this:

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

If you could explain what you are trying to achieve by using ninject in this scenario the community will be able to assist further.


Your KernelFactory probably returns the same kernel (singleton) on each successive call to the controller. Which is why you add a similar binding every time you hit the URL that activates this controller. So it probably works the first time and starts failing after the second time.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜