Не удается разрешить словарь в контейнере Unity - PullRequest
11 голосов
/ 29 апреля 2010

Я только что наткнулся на это:

внутри контейнера 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>()

это работает ...

есть идеи?

спасибо!

1 Ответ

9 голосов
/ 29 апреля 2010

Очень интересная находка +1. Похоже, ошибка в Unity, смотрите здесь:

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

Вы также можете попробовать это:

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

Это позволяет использовать конструктор по умолчанию, что позволяет обойти проблему ...

...