2010-04-29 13 views
9

he tropecé con esto:No se puede resolver en un recipiente Diccionario Unidad

dentro de un contenedor Unidad, quiero registrar IDictionary<TK, TV>; asume que es IDictionary<string, int>

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

pero si trato de

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

no resuelve ...

consigo ...

Microsoft.Practices.Unity.ResolutionFailedException: Microsoft.Practices.Unity.ResolutionFailedException: Falló la resolución de la dependencia, type = "System.Collections.Generic.IDictionary`2 [System.String, System.Int32]", name = " (ninguna)". Se produjo una excepción mientras: mientras se resolvía.

La excepción es: InvalidOperationException - El tipo Dictionary`2 tiene varios constructores de longitud 2. No se ha podido eliminar la ambigüedad.


En el momento de la excepción, el recipiente fue:

Resolución de System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary 2 [System.String, System.Int32], (ninguno)) --- > System.InvalidOperationException: el tipo Dictionary`2 tiene varios constructores de longitud 2. No se ha podido eliminar la ambigüedad ...

Parece que ha encontrado el Tipo a resolver (es decir, Dictionary<string, int>) pero no ha podido actualizarlo ...

¿Cómo es que la unidad no puede resolver este tipo? Si escribo

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

que funciona ...

alguna idea?

gracias!

Respuesta

9

Muy interesante encontrar +1. Parece que un error en la unidad, ver aquí:

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

También puede probar esto:

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

Eso hace que utilizar el constructor por defecto, lo cual evita el problema ...

+0

gracias por el hilo y la sugerencia - Creo que tendré que escribir un contenedor no genérico para el Diccionario, que es otro nivel de complejidad que podría haber hecho sin :(- gracias de nuevo – kiwipom

+0

sinceras disculpas por el retraso en aceptando este ... he o Acabo de hablar contigo sobre la sugerencia de InjectionConstructor, que de hecho elude el problema ... marcando como aceptado ahora - gracias :) – kiwipom

Cuestiones relacionadas