Включение общего класса в файл Unity App.Config

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

строка

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

очевидно, ошибочно из-за < > , однако я не убежден в их побеге;

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

является правильным.

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

Ответ 1

Отметьте это сообщение в блоге:

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

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

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

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

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

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

Ответ 2

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

Синтаксис документально описан для метода 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]]")

Ответ 3

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

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

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

Ответ 4

И это сильно подписанный тип как общий параметр.

<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" />