问题描述
|
我有这个想法,尝试使用自定义IMPORT属性根据条件来创建新的类。例如,如果我有:
[Import(\“ Position_32 \”)]如果我运行的是32位操作系统,则应该存在此名称,然后:
[Import(\“ 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; }
然后,您可以在运行时检查Dictionary
以获取适当的元数据,并使用该特定平台。
另外,您可以为强类型元数据(而不是字符串)创建自定义界面。有关详细信息,请参见导出和元数据。