C# 如何只导入类型,而不导入实例?
我正在导入DLL,它使用MEF(System.ComponentModel.Composition)和C# 如何只导入类型,而不导入实例?,c#,.net,list,mef,instantiation,C#,.net,List,Mef,Instantiation,我正在导入DLL,它使用MEF(System.ComponentModel.Composition)和[ImportMany(typeof(IPlugin))]属性导出IPlugin类 下面是我用来获取扩展的代码: AggregateCatalog catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); catalog.Catalog
[ImportMany(typeof(IPlugin))]
属性导出IPlugin
类
下面是我用来获取扩展的代码:
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
对象),以便创建我喜欢的实例?生成一个目录,然后从那里开始工作(无合成批处理),然后自己从那里找到相关的类型。你不能,MEF的工作原理是为找到的每个兼容和导出类型创建一个实例
最简单的方法是导入工厂,然后使用它们创建实际实例
界面看起来像:
interface IPluginFactory
{
IPlugin CreateInstance();
string TypeName {get;}
}
然后在MEF填充的工厂集合中搜索正确的类型名称,并调用其
CreateInstance
函数。请您更详细地解释一下,好吗?@Cobra\u Fast我在一个示例工厂界面中放了一个,这有意义吗?我很乐意提供所需的尽可能多的细节(我已经做了几次:),所以如果您想要更多,请告诉我!)所以我所做的就是导出一个工厂,通过它我可以稍后实例化实际的扩展实例?@Cobra_Fast,没错。我使用“TypeName”属性来查找它。它实际上不必是类型名,它可以是您想要与该类/工厂关联的任何内容。