我有以下3个接口:
public interface IWcfSvc
public interface IAdventureWorks : IWcfSvc
public interface INorthwind : IWcfSvc
他们都在自己的集会中。我想知道的是,如何使用MEF加载IAdventureWorks和INorthwind?正如您可能已经理解的那样,IWcfSvc是WCF将作为ServiceContracts使用的所有其他接口的默认接口。
到目前为止,我能够将MEF用于一个特定的接口,但我想让它变得动态,因为WCF服务将是自托管的,并且需要可以添加新服务而无需更改核心自托管服务。
答案 0 :(得分:2)
这种情况让我想起了IClassifierProvider
在Visual Studio SDK中的注册方式。虽然许多分类器提供程序可以在整个Visual Studio及其许多扩展中导出,但通常很少(可能只有一个)适用于您打开进行编辑的任何单个文档。要将特定IClassifierProvider
出口与有限数量的文档相关联,metadata attribute将应用于导出,例如如下:
[Export(typeof(IClassifierProvider))]
[ContentType("My Content Type")]
public class MyClassifierProvider : IClassifierProvider
元数据属性在MEF内部是高效且受到良好支持的。在您的应用程序中,您可以通过以下方式之一将它们公开给用户:
使用标准ExportMetadataAttribute
属性。如果Visual Studio完成此操作,它可能如下所示。
[Export(typeof(IClassifierProvider))]
[ExportMetadata("Content Type", "My Content Type")]
public class MyClassifierProvider : IClassifierProvider
创建自定义属性,以反映您希望扩展程序提供的特定元数据。