К сожалению, это невозможно с конфигурационными файлами, по крайней мере, не надежным способом.
Причина в том, что если у вас есть универсальный класс class A<T>
и параметр класса class B
, то среда не создаст класс A<B>
, пока вы не объявите тип A<B>
, используя его.Имя в формате A`1 [[B, Assm]] - это просто имя, которое создается во время выполнения - это означает универсальный «A», который принимает 1 параметр, созданный со следующими типами.Это не подсказка фабрике типов - это то, что вам нужно для того, что вы делаете.Таким образом, вы могли бы иметь возможность заставить это работать , если вам повезет и A<B>
окажется объявленным, но я бы не стал полагаться на это.
Это, я считаю, исправлено в сериализации контракта данных, которая используется более поздними частями платформы, но конфигурация устарела.Если вы посмотрите на XAML, то сможете использовать аргументы типа с типом:
<scg3:Dictionary x:TypeArguments="x:String, x:Object">
Обратите внимание, что это явная инструкция для фабрики типов - то, что синтаксический анализатор конфигурации делает не have.
Так что, к сожалению, это оставляет вас за счет объявления конкретного типа для каждого расширения - но это не так много работы:
public class MyBehaviorExtensionElement :
SimpleBehaviorExtensionElement<MyBehavior> {}
И с положительной стороны этоделает ваш конфигурационный файл более читабельным.
<behaviorExtensions>
<add name="myBehavior"
type="BehaviorTest.MyBehaviorExtensionElement, ServiceLibrary"/>
</behaviorExtensions>