Позвольте мне начать с того, что я прихожу к этому с ограниченным опытом MEF и достиг своих целей, используя и Castle, и Unity ранее.Я надеюсь, что нечто подобное можно сделать с помощью MEF.
Короче говоря, мне нужен фабричный класс, который может создавать объекты по имени.Более конкретно, у меня будет абстрактный базовый класс, такой как:
public abstract class TheBaseClass { ... }
. Будет любое количество подклассов, производных от базового класса:
public class OneSubClass : TheBaseClass { ... }
public class AnotherSubClass : TheBaseClass { ... }
Во время выполнения мне нужнофабрика, которую я могу вызвать, передав значение 'key', чтобы получить конкретный экземпляр подкласса, возвращаемый как:
var key = "AnotherSubClass";
TheBaseClass instance = TheFactory.CreateInstance(key);
В Castle и Unity я мог зарегистрировать тип с ключом в качестве имени ииспользуйте это значение для поиска при попытке разрешить экземпляр из контейнера.Я думал, что смогу выполнить то же самое с помощью ExportMetadata, но пока не знаю, как это сделать.
Обоснование этого подхода (в случае, если есть лучший способ) заключается в том, что мне нужносоздание экземпляра строго типизированного подкласса во время выполнения без знания этого типа во время компиляции, поскольку приложение расширяемо, и (экспортируемые) типы могут добавляться через внешние сборки.
Любые идеи?