MEF和WPF自定义导入定义

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

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

[导入(“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; }

然后,您可以在字典中检查相应的元数据,并在运行时使用该特定平台.

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

点赞