使用 MEF 的多个属性和方法
本文关键字:属性 方法 MEF 使用 | 更新日期: 2023-09-27 17:55:29
我正在尝试使用 MEF 构建插件框架,我有一个接口
public interface IPlugin
{
string SomeProperty {get;set;}
IList<string> DoSomething(string somevalue);
}
我正在考虑做一个可以导入许多的实现
public class MainContainer : IPlugin
{
public string _name;
public MainContianer(){
}
public MainContainer(string name){
_name = name;
}
[ImportMany]
List<Lazy<IPlugin, string>> plugins;
string SomeProperty { get {
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.SomeProperty;
}
throw new CustomException();
} }
List<string> DoSomething(string value){
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.DoSomething(value);
}
throw new CustomException();
}
}
我的问题是,是否有更好的方法来实现这一点,而不是我为每个属性和方法编写相同的块。
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.xxx
}
我看错了。我已经更新了我的代码,计算器示例将我推向了错误的方向。
public class MainContainer
{
private CompositionContainer _container;
[ImportMany]
public IEnumerable<IPlugin> Plugins;
public AdapterProvider(string pluginpath)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(pluginpath));
_container = new CompositionContainer(catalog);
_container.ComposeParts(this);
}
}
够了,
版主可以将其作为无效问题关闭。