我有这个想法尝试使用自定义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.