Включение общего класса в файл Unity App.Config
У меня есть класс типа ISimpleCache<IBrokeredDataObject>
, который я хочу добавить как псевдоним типа (затем тип) в файл App.Config
строка
<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, MyApplication" />
очевидно, ошибочно из-за < > , однако я не убежден в их побеге;
<typeAlias alias="ISimpleCacheOfIBrokeredDataObject" type="MyApplication.ISimpleCache<IBrokeredDataObject>, 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" />