MEF从已有属性导出

本文关键字:属性 MEF | 更新日期: 2023-09-27 18:01:28

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

Thanks in advance

MEF从已有属性导出

这可以很容易地用RegistrationBuilder完成-只需使用谓词只选择具有MyPlugin属性的类型:

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

第一个条件是真正重要的-第二个只是避免异常,以防你错误地标记了一个类,不实现IPlugin[MyPlugin]属性。