2010-04-29 7 views
9

Ich habe stolperte über dieses:Kann nicht lösen Wörterbuch in Unity Container

innerhalb einer Einheit Container, ich will IDictionary<TK, TV> registrieren; davon ausgehen, dass es IDictionary<string, int>

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

ist, aber wenn ich versuche,

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

es zu lösen schlägt fehl ...

ich ...

Microsoft.Practices.Unity.ResolutionFailedException: Microsoft.Practices.Unity.ResolutionFailedException: Auflösung der Abhängigkeit fehlgeschlagen, type = "System.Collections.Generic.IDictionary`2 [System.String, System.Int32]", name = " (keiner)". Ausnahme aufgetreten während: während der Auflösung.

Ausnahme ist: InvalidOperationException - Der Typ Dictionary `2 hat mehrere Konstruktoren der Länge 2. Kann nicht disambiguate.


Zum Zeitpunkt der Ausnahme, war der Behälter:

Resolving System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String, System.Int32], (none)) --- > System.InvalidOperationException: Der Typ Dictionary `2 hat mehrere Konstruktoren der Länge 2.

So sieht es aus, als hätte es den Typ gefunden zu lösen (Dictionary<string, int> zu sein) aber es versäumt, es neu zu erstellen ...

Wie kann Einheit diesen Typ nicht lösen? Wenn ich tippe

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

, das funktioniert ...

irgendwelche Ideen?

danke!

Antwort

9

Sehr interessante finden +1. Es scheint wie ein Fehler in der Einheit finden Sie hier:

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

Sie auch diese versuchen:

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

, dass sie den Standard-Konstruktor verwenden macht, damit das Problem zu umgehen ...

+0

Danke für den Thread und den Vorschlag - Ich denke, ich muss einen nicht-generischen Wrapper für das Dictionary schreiben, was nur eine weitere Ebene der Komplexität ist, auf die ich hätte verzichten können :(- nochmals vielen Dank – kiwipom

+0

aufrichtige Entschuldigung für die Verzögerung akzeptiere dieses ... Ich habe o Ich habe Sie gerade über den InjectionConstructor-Vorschlag eingeholt, der das Problem tatsächlich umgeht ... Markierung als akzeptiert - danke :) – kiwipom

Verwandte Themen