MEF和WPF自定义导入定义

问题描述:

我有这个想法尝试使用自定义的IMPORT属性来根据条件新建一个类。举例来说,如果我有:MEF和WPF自定义导入定义

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

[导入( “Position_64”),如果im运行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以获取适当的元数据,并使用该特定元数据平台,在运行时。

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

+1

不错。我看看这些。非常感谢 – 2011-05-25 16:30:28