使用MEF 2.0中的AddMetaData方法添加读取元数据

时间:2013-12-20 18:00:17

标签: c# mef

我正在尝试在我的应用程序中使用MEF 2.0中的RegistrationBuilder。我修改了我的类以不使用导出/导入属性。 我还使用以下语句将MetaData添加到导出的部分(基于MEF’s Convention model的“配置导出”部分中的代码示例):

var registration= new RegistrationBuilder();
// Export of the Interface which the classes implement
//registration.ForTypesDerivedFrom<ITransactionInterface>().Export<ITransactionInterface>();

//export of the types derived from ITransactionInterface            
registration.ForTypesDerivedFrom<ITransactionInterface>()
            .Export(configData=>configData.AddMetadata("Name",t=>t.Name))
            .Export<ITransactionInterface>();

我正在使用以下代码导入导出的部件(使用Lazy Imports):

IEnumerable<Lazy<ItransactionInterface>> txnObjects= container.GetExports<ITransactionInterface>();

现在我如何访问导出的类部件的元数据

非常感谢任何帮助 感谢

1 个答案:

答案 0 :(得分:1)

访问元数据的一种方法是添加元数据界面,如:

public interface ITransactionMetadata
{
    string Name { get; }
}

然后将CompositionContainer.GetExports重载与元数据视图参数一起使用:

IEnumerable<Lazy<ITransactionInterface, ITransactionMetadata>> txnObjects = container.GetExports<ITransactionInterface, ITransactionMetadata>();

然后您可以轻松访问元数据:

foreach (var export in txnObjects)
{
    Console.WriteLine("\t Name = {0}", export.Metadata.Name);
}

最后请注意,您需要导出要导入的确切类型。在您的情况下,您导入ITransactionInterface但导出实现该接口的类型。您需要将注册更改为:

registration.ForTypesDerivedFrom<ITransactionInterface>()
            .Export<ITransactionInterface>(configData => configData.AddMetadata("Name", t => t.Name));