2010-04-29 15 views
9

Ho appena imbattuto in questo:Impossibile risolvere dizionario nel container Unità

all'interno di un contenitore Unità, Vorrei iscrivermi IDictionary<TK, TV>; supporre che si tratta di IDictionary<string, int>

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

ma se provo

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

non riesce a risolvere ...

ricevo ...

Microsoft.Practices.Unity.ResolutionFailedException: Microsoft.Practices.Unity.ResolutionFailedException: risoluzione della dipendenza non riuscita, type = "System.Collections.Generic.IDictionary`2 [System.String, System.Int32]", name = " (nessuna)". Si è verificata un'eccezione mentre: durante la risoluzione.

L'eccezione è: InvalidOperationException - Il tipo Dizionario`2 ha più costruttori di lunghezza 2. Impossibile disambiguare.


Al momento del l'eccezione, il contenitore è stato:

Risoluzione System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String, System.Int32], (none)) --- > System.InvalidOperationException: Il tipo Dizionario`2 ha più costruttori di lunghezza 2. Impossibile disambiguare ..

Quindi sembra che abbia trovato il Tipo da risolvere (essendo Dictionary<string, int>) ma non è riuscito a farlo ...

Come mai l'unità non può risolvere questo tipo? Se scriv

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

che funziona ...

tutte le idee?

grazie!

risposta

9

Ricerca molto interessante +1. Sembra come un insetto in Unity, vedere qui:

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

si può anche provare questo:

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

che lo rende utilizzare il costruttore di default, aggirando così il problema ...

+0

grazie per il thread e il suggerimento - credo che avrò bisogno di scrivere un wrapper non generico per il dizionario, che è solo un altro livello di complessità che avrei potuto fare senza :(- grazie ancora – kiwipom

+0

scuse sincere per il ritardo su accettando questo ... ho o appena raggiunto con te sul suggerimento di InjectionConstructor, che in effetti aggira il problema ... contrassegnando come accettato ora - grazie :) – kiwipom

Problemi correlati