MEF和WPF自定义导入定义

时间:2011-05-25 15:33:42

标签: wpf mef

我有这个想法尝试使用自定义IMPORT属性来根据条件新建一个类。例如,如果我有:

[导入(“Position_32”)]如果我正在运行32位操作系统,那么这应该存在,然后:

[导入(“Position_64”)]如果我正在运行64位操作系统。有没有办法根据条件为属性动态创建类型名称?

从概念上讲,它看起来像这样:

[导入(((IsWIN64())?“Position_64”:“Position_32”))]这不起作用,因为类型名称必须是常量。

我想让正确的位置类尽可能透明化。我的意思是我做了一个基于工厂的方法,使用funcs来获得我想要的效果,但我很乐意使用MEF。想法?

感谢,

大卫

1 个答案:

答案 0 :(得分:2)

你可以这样使用ExportMetadataAttribute

[Import("Position")]
[ExportMetadata("Platform", "32bit")]
public YourType ...

然后,当您进入导入时,请使用:

 [ImportMany]
 public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; }

然后,您可以检查Dictionary以获取相应的元数据,并在运行时使用该特定平台。

此外,您可以为强类型元数据(而不是字符串)创建自定义界面。有关详细信息,请参阅Exports and Metadata