Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# .NET MEF组合多表对象_C#_Mef - Fatal编程技术网

C# .NET MEF组合多表对象

C# .NET MEF组合多表对象,c#,mef,C#,Mef,我试图找到一种在新对象中组合部件的方法。我认为最好的解释是举个例子 这是一个简单的接口,由几个插件实现。具体来说,让我们说4 公共接口IPlugin { 无效剂量 } 公共接口IPluginMetadata { 字符串PluginName{get;} } [ExporttypeofIPlugin] [ExportMetadataPluginName,Plugin1-4] 公共类ConcretPlugin:IPlugin { 公共无效剂量{ //一些东西: } } 现在让我们假设这些插件驻留在项目

我试图找到一种在新对象中组合部件的方法。我认为最好的解释是举个例子

这是一个简单的接口,由几个插件实现。具体来说,让我们说4

公共接口IPlugin { 无效剂量 } 公共接口IPluginMetadata { 字符串PluginName{get;} } [ExporttypeofIPlugin] [ExportMetadataPluginName,Plugin1-4] 公共类ConcretPlugin:IPlugin { 公共无效剂量{ //一些东西: } } 现在让我们假设这些插件驻留在项目的子文件夹中,因此我使用DirectoryCatalog获取实现IPlugin的所有部件。在本例中,我提到了4个插件,因此我将使用ImportMany来导入部件

比如:

[ImportManytypeofIPlugin] 私有列表插件{get;set;} 静态环[]args{ var catalog=new DirectoryCatalogPlugins/; var container=新的CompositionContainercatalog; 容器。组件这; } 如果我这样做,一切都没问题,但我想要:

公共类插件容器{ [进口] 私有延迟插件; 公共void加载插件{ //这是用不同的插件做不同的事情 plugin.DoSomething; } } 静态环[]args{ var catalog=new DirectoryCatalogPlugins/; var container=新的CompositionContainercatalog; container.ComposePartsPluginContainer; //现在我想要4个“PluginContainer”的实例 //因为实际上我有4个插件,每个实例都有一个 //四部分 }
我希望你能想象我想要实现什么?

我不明白你需要多个容器。你能澄清一下你的预期用途吗?这只是一个例子,但我尝试了一下。假设PluginContainer类中有一些其他方法。这些方法对于每个插件都是一样的,但是这些方法的输出会根据插件的不同而变化,也就是说MEF注入的插件。现在更好了?请编辑您的问题以包含新信息。但您的意思是您有多个相同插件的实现可以选择,还是您有许多插件可以做不同的事情?如何使用它们会使最终实现的外观有所不同。同时,请看一下这里关于嵌套容器的部分:看看这对您来说是否是一个答案。根据插件如何连接到系统的其余部分,我会根据需要将它们从单个主容器中拉出。您可以通过适当的元数据定义来确定需要哪个插件。