MEF从预先存在的属性导出

时间:2016-08-09 19:53:03

标签: c# mef

我正在使用MEF构建插件管理器,理想情况下,我不需要更改任何预先存在的代码来构建它。 每个要使用的类都有(预先存在的)属性[MyPlugin] - 是否可以使用RegistrationBuilder或其他方法隐式导出基于此属性?我还没有找到任何关于如何或是否可行的提及,并且它不是基于界面进行导出(尽管我必须这样做)

提前致谢

1 个答案:

答案 0 :(得分:0)

使用RegistrationBuilder可以轻松完成此操作 - 只需让谓词选择仅具有MyPlugin属性的类型:

var builder = new RegistrationBuilder();
builder.ForTypesMatching(t => t.IsDefined(typeof(MyPluginAttribute)) &&
                              typeof(IPlugin).IsAssignableFrom(t))
       .Export<IPlugin>();

第一个条件才是真正重要的 - 第二个条件只是在你错误地标记了一个没有用IPlugin属性实现[MyPlugin]的类时避免异常。