Я только что наткнулся на это:
внутри контейнера Unity, я хочу зарегистрироваться IDictionary<TK, TV>
; предположим, что это IDictionary<string, int>
_unityContainer = new UnityContainer()
.RegisterType<IDictionary<string, int>, Dictionary<string, int>>();
но если я попытаюсь
var d = _unityContainer.Resolve<IDictionary<string, int>>();
Не удается разрешить ...
Я понимаю ...
Microsoft.Practices.Unity.ResolutionFailedException: Microsoft.Practices.Unity.ResolutionFailedException: сбой разрешения зависимости, type = "System.Collections.Generic.IDictionary`2 [System.String, System.Int32]", name = "(никто)".
Исключение произошло во время: при разрешении.
Исключение составляет: InvalidOperationException - Тип Dictionary`2 имеет несколько конструкторов длины 2. Невозможно устранить неоднозначность.
На момент исключения контейнер был:
Решение System.Collections.Generic.Dictionary 2[System.String,System.Int32],(none) (mapped from System.Collections.Generic.IDictionary
2 [System.String, System.Int32], (нет))
---> System.InvalidOperationException: тип Dictionary`2 имеет несколько конструкторов длины 2. Невозможно устранить неоднозначность ..
Похоже, он нашел тип для разрешения (будучи Dictionary<string, int>
), но не смог его обновить ...
Почему единство не может разрешить этот тип? Если я наберу
IDictionary<string, int> d = new Dictionary<string, int>()
это работает ...
есть идеи?
спасибо!