我正在使用 MEF 构建一个插件管理器,理想情况下,我不需要更改任何预先存在的代码来构建它。 要使用的每个类都有(预先存在的)属性 [MyPlugin] - 是否可以使用 RegistrationBuilder 或其他方法基于此属性隐式导出?我无法找到任何关于如何或是否可行的提及,并且最好不要基于界面导出(尽管如果必须的话我会这样做)
提前致谢
最佳答案
这可以通过 RegistrationBuilder
轻松完成 - 只需让谓词只选择具有 MyPlugin
属性的类型即可:
var builder = new RegistrationBuilder();
builder.ForTypesMatching(t => t.IsDefined(typeof(MyPluginAttribute)) &&
typeof(IPlugin).IsAssignableFrom(t))
.Export<IPlugin>();
第一个条件真的很重要 - 第二个条件只是避免异常,以防万一你用 [MyPlugin]
错误地标记了一个没有实现 IPlugin
的类> 属性。
关于c# - MEF 从预先存在的属性中导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859325/