Я создаю приложение импорта базы данных, чем я хочу быть расширяемым (пользовательские модели db могут быть добавлены по мере необходимости). У моего базового компонента есть методы, которые должны реализовывать расширенные типы: MapData & SaveData.Использование MEF с абстрактным базовым классом
Я определил базу как абстрактный класс, и все работает, когда расширенные типы находятся в одном пространстве имен. Тем не менее, я хочу использовать MEF для импорта расширенных типов в другое пространство имен во время выполнения, но я не могу понять, как это сделать.
Базовый класс:
namespace Program
{
public abstract class Component
{
public abstract string TypeName { get; }
public abstract DataSet MapData(DataSet db);
public abstract bool SaveData();
}
}
расширенного класса (в отдельном проекте):
using Program.Component;
namespace ExtendedType
{
[Export(typeof(Component)]
class Type1 : Component
{
public override string TypeName { get { return "Type1" } }
public override DataSet MapData(DataSet db)
{
// create various object models from db here
return db;
}
public override bool SaveData()
{
// save object models
return true;
}
}
}
Программа импортировать все расширенные типы:
namespace Program
{
[ImportMany(typeof(Component))]
public IEnumerable<Component> componentTypes;
public Program()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(Component).Assembly));
container = new CompositionContainer(catalog);
this.container.ComposeParts(this);
}
}
Согласно тому, что я имею прочитайте, атрибут [ImportMany] в IEnumerable должен заполнить это во время выполнения, но он всегда пуст. CompositionContainer всегда пуст.
Что я установил неправильно? Как я могу получить список расширенных типов компонентов?
ссылки, которые я нашел, похожи на то, что я хочу сделать: Расширение типов в том же пространстве имен: [ссылка] (http://vivekcek.wordpress.com/2012/10/ 12/abstract-class-with-mef /) Экспорт/ИмпортMany типов в разных пространствах имен: [link] (http://www.codeproject.com/Articles/188054/An-Introduction-to-Managed-Extensibility-Framework) – David