Я только что наткнулся на это:
в контейнере Единицы я хочу зарегистрироваться IDictionary<TK, TV>
; предположите, что это IDictionary<string, int>
_unityContainer = new UnityContainer()
.RegisterType<IDictionary<string, int>, Dictionary<string, int>>();
но если я пробую
var d = _unityContainer.Resolve<IDictionary<string, int>>();
этому не удается решить...
Я добираюсь...
Microsoft. Методы. Единица. ResolutionFailedException: Microsoft. Методы. Единица. ResolutionFailedException: Разрешение зависимости перестало работать, введите = "Система. Наборы. Универсальный. IDictionary '2 [Система. Строка, Система. Int32]", называют =" (ни один)". Исключение произошло в то время как: при разрешении.
Исключение: InvalidOperationException - Словарь типа '2 имеет несколько конструкторов длины 2. Не мог снять неоднозначность.
Во время исключения контейнер был:
Разрешение системы. Наборы. Универсальный. Словарь2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary
2 [Система. Строка, Система. Int32], (ни один))---> Система. InvalidOperationException: Словарь типа '2 имеет несколько конструкторов длины 2. Не мог снять неоднозначность..
Таким образом, похоже, что это нашло, что Тип решает (быть Dictionary<string, int>
) но отказавший к новому это...
Каким образом единица не может разрешить этот тип? Если я ввожу
IDictionary<string, int> d = new Dictionary<string, int>()
это работает...
какие-либо идеи?
спасибо!
Очень интересная находка +1. Похоже на ошибку в Unity, см. Здесь:
http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292
Вы также можете попробовать следующее:
container.RegisterType<IDictionary<int, string>, Dictionary<int, string>>
(new InjectionConstructor());
Это заставляет использовать значение по умолчанию конструктор, что позволяет обойти проблему ...