使用 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
}

使用 MEF 的多个属性和方法

我看错了。我已经更新了我的代码,计算器示例将我推向了错误的方向。

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);
    }
}

够了,

版主可以将其作为无效问题关闭。