我正在使用MEF构建插件管理器,理想情况下,我不需要更改任何预先存在的代码来构建它。 每个要使用的类都有(预先存在的)属性[MyPlugin] - 是否可以使用RegistrationBuilder或其他方法隐式导出基于此属性?我还没有找到任何关于如何或是否可行的提及,并且它不是基于界面进行导出(尽管我必须这样做)
提前致谢
答案 0 :(得分:0)
使用RegistrationBuilder
可以轻松完成此操作 - 只需让谓词选择仅具有MyPlugin
属性的类型:
var builder = new RegistrationBuilder();
builder.ForTypesMatching(t => t.IsDefined(typeof(MyPluginAttribute)) &&
typeof(IPlugin).IsAssignableFrom(t))
.Export<IPlugin>();
第一个条件才是真正重要的 - 第二个条件只是在你错误地标记了一个没有用IPlugin
属性实现[MyPlugin]
的类时避免异常。