Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何只导入类型,而不导入实例?_C#_.net_List_Mef_Instantiation - Fatal编程技术网

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

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

我正在导入DLL,它使用MEF(System.ComponentModel.Composition)和
[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”属性来查找它。它实际上不必是类型名,它可以是您想要与该类/工厂关联的任何内容。