Включение универсального класса в файл Unity App.Config - PullRequest
10 голосов
/ 18 января 2009

У меня есть класс типа ISimpleCache<IBrokeredDataObject>, который я хочу добавить в качестве псевдонима типа (затем типа) в файле App.Config

линия

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />

явно неверно из-за <>, но я не уверен, что избегать их;

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache&lt;IBrokeredDataObject&gt;, MyApplication" />

тоже верно.

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

Ответы [ 4 ]

22 голосов
/ 18 января 2009

Проверить это сообщение в блоге:

Чтобы написать универсальный тип, используйте знак `, за которым следует число универсальных типов, которые получает интерфейс / класс.

И комментарий на той же странице сказал:

Чтобы использовать тип константы в общем, вам нужно использовать скобки ([[ ]]).

Так что, я думаю, ваш файл конфигурации должен содержать что-то вроде этого:

<typeAlias alias="ISimpleCacheOfIBrokeredDataObject"
   type="MyApplication.ISimpleCache`1[[MyApplication.IBrokeredDataObject, MyApplication]], MyApplication" />

Обратите внимание на использование символа "серьезный акцент" или "обратная кавычка" (`), а не обычная одинарная кавычка (').

14 голосов
/ 22 сентября 2011

Я бы скорее прокомментировал ответ выше, но мой счет недостаточно высок.

Синтаксис задокументирован для метода Type.GetType (строка) здесь: http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

Есть несколько примеров, некоторые из которых я вставил ниже.

Универсальный тип с одним аргументом типа

Type.GetType("MyGenericType`1[MyType]")

Универсальный тип с двумя аргументами типа

Type.GetType("MyGenericType`2[MyType,AnotherType]")

Универсальный тип с двумя аргументами типа, уточненными в сборке

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

Универсальный тип с квалификацией сборки и аргумент типа с квалификацией сборки

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типа

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")
2 голосов
/ 05 октября 2009

И вот как вы используете тип, который получает два универсальных типа:

<section name="doubleFamilyConfig"
         type="ConfigTest.Configuration.FamilySection`2[
               [ConfigTest.Types.Child, ConfigTest],
               [ConfigTest.Types.Parent, ConfigTest]
               ],
               ConfigTest" />

При желании вы можете использовать каждый тип в отдельной строке, чтобы его было легче понять. Обратите внимание, что первая скобка должна быть сразу после типа (FamilySection`2 ** [**).

1 голос
/ 29 июня 2009

И это строго подписанный тип как универсальный параметр.

<typeAlias alias="IPublisherOfXElement" type="MyLib.IX.IPublisher`1[[System.Xml.Linq.XElement, System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], MyLib.IX" />
...