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