2011-02-17 4 views
3

J'ai récemment mis à jour l'application ASP.NET MVC 3 vers Ninject 2.2.Ninject 2.2 plusieurs liaisons

Auparavant, j'avais l'interface suivante pour la mise en œuvre obligatoire dans mon application principale:

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope(); 

En outre, j'ai eu ce qui suit dans un ensemble différent qui a été chargé par mon application principale:

var arg = new ConstructorArgument("info", "something"); 
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg); 

Cela fonctionnait bien auparavant et l'implémentation plus spécifique (celle avec l'argument) était reconnue. Cependant, quand je suis passé à Ninject 2.2, j'ai reçu l'erreur suivante:

Error activating IMyInterface{MyClass} 
More than one matching bindings are available. 
Activation path: 
2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass 
1) Request for IMyInterface 

Suggestions: 
1) Ensure that you have defined a binding for IMyInterface{MyClass} only once. 

Quel changement a été fait 2,0 à 2,2 qui est à l'origine et c'est là un travail autour? Ninject 2.2 s'assure que seulement une liaison correspondante existe lors de la résolution des instances

Répondre

5

2.0 a renvoyé une instance de la première liaison correspondante en ignorant qu'il y en a d'autres. Mais avoir plusieurs liaisons si une seule est demandée reflète une mauvaise configuration et peut conduire à des comportements non-détectés difficiles à détecter.

Mais je vois qu'il devrait y avoir la possibilité de remplacer les liaisons génériques ouvertes par des liaisons plus spécifiques. Je vais certainement le regarder et il sera soit ajouté à une version de correction de bugs ou la prochaine version majeure.

+3

Merci beaucoup de voir les développeurs open source répondre aux questions sur leur projet respectif. – Omar

+2

Donc, y avait-il un correctif de bogue pour cet article? Ça nous tue maintenant. Si ce n'est pas le cas, quand pouvons-nous nous attendre à ce que la prochaine version soit publiée, qui supporte cela? –

+2

Ditto - J'ai perdu beaucoup de temps avec ça. –

Questions connexes