如何只导入类型,而不是实例?

时间:2014-05-29 16:37:31

标签: c# .net list mef instantiation

我正在使用带有IPlugin属性的MEF(System.ComponentModel.Composition)导入导出[ImportMany(typeof(IPlugin))]类的DLL。

以下是我用来获取扩展程序的代码:

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog(AppDataHelper.ExeDir + "/Module/"));
CompositionContainer container = new CompositionContainer(catalog);
CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);

但是,据我所知,相应的属性将在之后保存实例。

如何仅导入扩展的类型(最好Type个对象),以便创建实例,但我喜欢自己?

2 个答案:

答案 0 :(得分:3)

你不能,MEF通过创建它找到的每个兼容和导出类型的单个实例来工作。

最简单的方法是导入工厂,然后使用它们来创建实际的实例。

界面看起来像:

interface IPluginFactory
{
    IPlugin CreateInstance();
    string TypeName {get;}
}

然后搜索MEF填充的工厂集合以获取正确的类型名称并调用其CreateInstance函数。

答案 1 :(得分:0)

生成目录,然后从那里开始工作(没有合成批处理)并自己从中找到相关类型。