MEF 和 WPF 自定义导入定义

4
我有一个想法,尝试使用自定义IMPORT属性根据条件实例化一个类。例如,如果我有:
[Import(“Position_32”)] 如果我运行的是32位操作系统,则应存在此项,然后:
[Import(“Position_64”)] 如果我运行的是64位操作系统。是否有任何方法可以使属性的类型名称根据条件动态生成?
从概念上讲,它可能看起来像这样:
[Import(((IsWIN64())?“Position_64”:“Position_32”))] 这不起作用,因为类型名称需要是常量。
我希望使正确位置类的实例化尽可能透明。我的意思是,我使用了基于工厂的方法,并使用了函数来获得我想要的效果,但我很想为此使用MEF。有什么好的想法吗?
非常感谢,
David
1个回答

2
您可以使用 ExportMetadataAttribute 来实现:
[Import("Position")]
[ExportMetadata("Platform", "32bit")]
public YourType ...

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

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

您可以检查Dictionary以获取适当的元数据,并在运行时使用特定平台。

此外,您可以创建一个自定义接口来实现强类型元数据(而不是字符串)。 详情请参见导出和元数据


1
好的,我会看一下这些。非常感谢。 - David Whitten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接