Команда Unity исправила эту ошибку обработки дженериков еще в 2008 году? - PullRequest
0 голосов
/ 18 апреля 2010

На моем уровне опыта работы с Unity, возможно, будет быстрее спросить, была ли исправлена ​​ошибка "обработки дженериков", признанная ctavares еще в 2008 , в публичном выпуске.

Здесь была проблема (которая может быть моей проблемой сегодня):

Привет

Я получаю исключение при использовании ....

container.RegisterType (TypeOf (IDictionary <,>), TypeOf (Dictionary <,>));

Исключением является ...

"Не удалось разрешить зависимость, type = \ "IDictionary 2\", name = \"\". Exception message is: The current build operation (build key Build Key[System.Collections.Generic.Dictionary 2 [System.String, System.String], null]) не удалось: текущая сборка операция (ключ сборки Build Клавиша [System.Collections.Generic.Dictionary 2[System.String,System.String], null]) failed: The type Dictionary 2 имеет несколько конструкторов длины 2. Невозможно устранить неоднозначность.

Когда я пытаюсь ...

IDictionary myExampleDictionary = container.Resolve> ();

Здесь был модерируемый ответ:

Нет книг, которые бы помогли, Unity слишком нова для издателей, чтобы их догнать.

К сожалению, вы столкнулись с ошибкой в ​​нашей работе с генериками. В настоящее время это исправлено в нашей внутренней версии, но пройдет немного времени, прежде чем мы сможем разобраться. В то же время, в качестве обходного пути вы могли бы сделать что-то вроде этого:

открытый класс WorkaroundDictionary: словарь { public WorkaroundDictionary () {} }

container.RegisterType (TypeOf (IDictionary <,>), TypeOf (WorkaroundDictionary <,>)); * * тысяча тридцать четыре

WorkaroundDictionary имеет только конструктор по умолчанию, поэтому он не создает проблем. Поскольку остальная часть вашего приложения написана на языке IDictionary, когда мы получим фиксированную версию, вы можете просто заменить регистрацию настоящим классом Dictionary, исключить обходной путь, и все будет по-прежнему работать.

Извините за ошибку, она скоро будет исправлена!

1 Ответ

1 голос
/ 18 апреля 2010

По данным Unity Team:

Просто хотел, чтобы люди знали, что мы выпустил биты, которые имеют дженерики исправляет в них. Взглянуть и дайте нам знать, что вы думаете. Это проверено в исходном коде управления.

Возможно, вам потребуется получить последний исходный код и собрать себя (2.x), поскольку исправление ошибки, возможно, еще не было упаковано.

...