MEF和WPF定制导入定义

问题描述

| 我有这个想法,尝试使用自定义IMPORT属性根据条件来创建新的类。例如,如果我有: [Import(\“ Position_32 \”)]如果我运行的是32位操作系统,则应该存在此名称,然后: [Import(\“ Position_64 \”)]如果我运行的是64位操作系统。有什么方法可以根据条件使属性的类型名称动态化吗? 从概念上讲,它可能像这样: [导入((((IsWIN64())?\“ Position_64 \”:\“ Position_32 \”))]这不起作用,因为类型名需要为常量。 我想尽可能透明地更新适当的职位类别。我的意思是我使用funcs进行了基于工厂的方法来获得想要的效果,但是我很乐意为此使用MEF。有想法吗? 非常感谢, 大卫     

解决方法

您可以这样使用ExportMetadataAttribute:
[Import(\"Position\")]
[ExportMetadata(\"Platform\",\"32bit\")]
public YourType ...
然后,当您导入时,请使用:
 [ImportMany]
 public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; }
然后,您可以在运行时检查
Dictionary
以获取适当的元数据,并使用该特定平台。 另外,您可以为强类型元数据(而不是字符串)创建自定义界面。有关详细信息,请参见导出和元数据。