MEF和WPF定制导入定义

问题描述

| 我有这个想法,尝试使用自定义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
以获取适当的元数据,并使用该特定平台。 另外,您可以为强类型元数据(而不是字符串)创建自定义界面。有关详细信息,请参见导出和元数据。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...