2010-04-29 7 views
9

Je viens de tombé sur ce:Impossible de résoudre le Dictionnaire dans le récipient unité

dans un conteneur de l'unité, je veux enregistrer IDictionary<TK, TV>; supposons que c'est IDictionary<string, int>

_unityContainer = new UnityContainer() 
    .RegisterType<IDictionary<string, int>, Dictionary<string, int>>(); 

mais si je tente

var d = _unityContainer.Resolve<IDictionary<string, int>>(); 

il ne parvient pas à résoudre ...

Je reçois ...

Microsoft.Practices.Unity.ResolutionFailedException: Microsoft.Practices.Unity.ResolutionFailedException: La résolution de la dépendance a échoué, type = "System.Collections.Generic.IDictionary`2 [System.String, System.Int32]", name = " (aucun)". Une exception est survenue pendant la résolution. L'exception est: InvalidOperationException - Le type Dictionary`2 a plusieurs constructeurs de longueur 2. Impossible de désambiguïser.


Au moment de l'exception, le récipient était de:

Résolution System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String, System.Int32], (none)) --- > System.InvalidOperationException: Le type Dictionary`2 a plusieurs constructeurs de longueur 2. Impossible de désambiguïser.

Donc, il semble qu'il a trouvé le type à résoudre (étant Dictionary<string, int>), mais il a échoué ...

Comment l'unité ne peut-elle pas résoudre ce type? Si je tape

IDictionary<string, int> d = new Dictionary<string, int>() 

qui fonctionne ...

des idées?

merci!

Répondre

9

Très intéressant trouver +1. On dirait un bug dans l'unité, voir ici:

http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292

Vous pouvez aussi essayer ceci:

container.RegisterType<IDictionary<int, string>, Dictionary<int, string>> 
       (new InjectionConstructor()); 

Cela fait utiliser le constructeur par défaut, contournant ainsi la question ...

+0

merci pour le fil et la suggestion - je suppose que je vais devoir écrire un wrapper non générique pour le dictionnaire, qui est juste un autre niveau de complexité que je pourrais avoir fait sans :(- merci encore – kiwipom

+0

sincères excuses pour le retard sur acceptant celui-ci ... j'ai nly juste rattrapé avec vous sur la suggestion InjectionConstructor, ce qui contourne effectivement le problème ... marquage comme accepté maintenant - merci :) – kiwipom

Questions connexes