我正在尝试在我的应用程序中使用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>();
现在我如何访问导出的类部件的元数据?
非常感谢任何帮助 感谢
答案 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));