Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 如何组成MEF中的某个部分?_C#_Mef - Fatal编程技术网

C# 如何组成MEF中的某个部分?

C# 如何组成MEF中的某个部分?,c#,mef,C#,Mef,我有一个MEF扩展和一个类库,它构成了它的一部分。 目前我认为它的工作原理如下 _container.ComposeParts(obj); 上述内容将构成obj类成员内部的所有属性部分。我想做如下事情(注意:以下代码仅用于演示目的,与MSDN中记录的CompositionContainer对象模型无关) imycustompartobj=_container.composeCertainPart(); MEF允许吗?如果您的类型有一个构造函数,您可以将ComposeExportedValue

我有一个MEF扩展和一个类库,它构成了它的一部分。 目前我认为它的工作原理如下

_container.ComposeParts(obj);
上述内容将构成obj类成员内部的所有属性部分。我想做如下事情(注意:以下代码仅用于演示目的,与MSDN中记录的CompositionContainer对象模型无关)

imycustompartobj=_container.composeCertainPart();

MEF允许吗?

如果您的类型有一个构造函数,您可以将
ComposeExportedValue
方法与
GetExport
方法一起使用。例如:

IMyCustomPart partObj = _container.ComposeExportedValue( _container.GetExport<IMyCustomPart>().Value );
imycustompartobj=\u container.composeSeExportedValue(\u container.GetExport().Value);
免责声明:我还没有机会对此进行测试。

如何使用

您可以这样做:

[Export]
public class YourClass {

  [Import] 
  public ExportFactory<MyCustomPart> CustomPartExporter {get; set;}

  public IMyCustomPart GetMyCustomPart() {
    return CustomPartExporter.CreateExport().Value;
  }
}
[导出]
公共课你的课{
[进口]
公共ExportFactory CustomPartExporter{get;set;}
公共IMyCustomPart GetMyCustomPart(){
返回CustomPartExporter.CreateExport()值;
}
}

您可以使用以下
GetExportXXXXX
方法:

要获取单个零件,请执行以下操作:

var part = _container.GetExportedValue<IMyCustomPart>();
最后,如果您想创建非共享部件并自己处理它们的生命周期(在大多数其他情况下,这是由容器完成的),那么还有一些方法可以帮助您。有关ExportFactory的介绍,请查看

var part = _container.GetExportedValue<IMyCustomPart>();
var parts = _container.GetExportedValues<IMyCustomPart>();
[Export]
[PartCreationPolicy(CreationPolicy = CreationPolicy.NonShared)]
public class MyExportedClass { ... }