我正在使用带有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
个对象),以便创建实例,但我喜欢自己?
答案 0 :(得分:3)
你不能,MEF通过创建它找到的每个兼容和导出类型的单个实例来工作。
最简单的方法是导入工厂,然后使用它们来创建实际的实例。
界面看起来像:
interface IPluginFactory
{
IPlugin CreateInstance();
string TypeName {get;}
}
然后搜索MEF填充的工厂集合以获取正确的类型名称并调用其CreateInstance
函数。
答案 1 :(得分:0)
生成目录,然后从那里开始工作(没有合成批处理)并自己从中找到相关类型。