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

C# 读取MEF 2.0中使用AddMetaData方法添加的元数据,c#,mef,C#,Mef,我正在尝试在我的应用程序中使用MEF 2.0中的RegistrationBuilder。我已修改我的类以不使用导出/导入属性。 此外,我还使用以下语句(基于中“配置导出”部分的代码示例)向导出的零件添加元数据: var registration=new RegistrationBuilder(); //导出类实现的接口 //registration.ForTypesDerivedFrom().Export(); //从ITransactionInterface导出的类型的导出 registrat

我正在尝试在我的应用程序中使用MEF 2.0中的RegistrationBuilder。我已修改我的类以不使用导出/导入属性。 此外,我还使用以下语句(基于中“配置导出”部分的代码示例)向导出的零件添加元数据:

var registration=new RegistrationBuilder();
//导出类实现的接口
//registration.ForTypesDerivedFrom().Export();
//从ITransactionInterface导出的类型的导出
registration.forTypesDrivedFrom()文件
.Export(configData=>configData.AddMetadata(“Name”,t=>t.Name))
.Export();
我正在使用以下代码导入导出的零件(使用惰性导入):

IEnumerable<Lazy<ItransactionInterface>> txnObjects= container.GetExports<ITransactionInterface>();
IEnumerable txnObjects=container.GetExports();
现在,我如何访问导出的类部件的元数据

非常感谢您的帮助
谢谢

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

public interface ITransactionMetadata
{
    string Name { get; }
}
然后将重载与元数据视图参数一起使用:

IEnumerable<Lazy<ITransactionInterface, ITransactionMetadata>> txnObjects = container.GetExports<ITransactionInterface, ITransactionMetadata>();
最后请注意,您需要导出要导入的确切类型。在本例中,您导入
ITransactionInterface
,但导出实现接口的类型。您需要将注册更改为:

registration.ForTypesDerivedFrom<ITransactionInterface>()
            .Export<ITransactionInterface>(configData => configData.AddMetadata("Name", t => t.Name));
registration.ForTypesDerivedFrom()
.Export(configData=>configData.AddMetadata(“Name”,t=>t.Name));
foreach (var export in txnObjects)
{
    Console.WriteLine("\t Name = {0}", export.Metadata.Name);
}
registration.ForTypesDerivedFrom<ITransactionInterface>()
            .Export<ITransactionInterface>(configData => configData.AddMetadata("Name", t => t.Name));