我有这个想法尝试使用自定义IMPORT属性来根据条件新建一个类。例如,如果我有:
[导入(“Position_32”)]如果我正在运行32位操作系统,那么这应该存在,然后:
[导入(“Position_64”)]如果我正在运行64位操作系统。有没有办法根据条件为属性动态创建类型名称?
从概念上讲,它看起来像这样:
[导入(((IsWIN64())?“Position_64”:“Position_32”))]这不起作用,因为类型名称必须是常量。
我想让正确的位置类尽可能透明化。我的意思是我做了一个基于工厂的方法,使用funcs来获得我想要的效果,但我很乐意使用MEF。想法?
感谢,
大卫
答案 0 :(得分:2)
你可以这样使用ExportMetadataAttribute:
[Import("Position")]
[ExportMetadata("Platform", "32bit")]
public YourType ...
然后,当您进入导入时,请使用:
[ImportMany]
public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; }
然后,您可以检查Dictionary
以获取相应的元数据,并在运行时使用该特定平台。
此外,您可以为强类型元数据(而不是字符串)创建自定义界面。有关详细信息,请参阅Exports and Metadata。