C# 使用MEF允许用户添加自定义插件、运行方法和更改数据点集合

C# 使用MEF允许用户添加自定义插件、运行方法和更改数据点集合,c#,plugins,mef,C#,Plugins,Mef,我有一个用Prism和MEF构建的应用程序。 我有一些模块(在同一个解决方案中定义)可以加载,并且一切正常 然而,现在我想允许用户添加他们自己的插件(基本上这些插件应该改变数据点的集合)——因此换句话说,用户创建一个算法(插件),改变ViewModel中的这些数据点 我需要定义某种“契约”,用户在创建新插件时需要遵守这种契约。我该怎么做 插件应该是/plugin文件夹中的一个.dll,并且应该在运行时加载,应该在包含每个插件的用户控件的视图中填充ListView。MEF将使这项工作非常简单和顺利

我有一个用Prism和MEF构建的应用程序。 我有一些模块(在同一个解决方案中定义)可以加载,并且一切正常

然而,现在我想允许用户添加他们自己的插件(基本上这些插件应该改变数据点的集合)——因此换句话说,用户创建一个算法(插件),改变ViewModel中的这些数据点

我需要定义某种“契约”,用户在创建新插件时需要遵守这种契约。我该怎么做


插件应该是/plugin文件夹中的一个.dll,并且应该在运行时加载,应该在包含每个插件的用户控件的视图中填充ListView。

MEF将使这项工作非常简单和顺利

对于插件:

  • 为你的插件创建一个接口。 它实际上并不需要非常复杂,尽管您可以使用它来强制开发人员添加一些描述或版本信息,当然还有一个接收集合并对其进行转换的方法

  • 插件应该使用ExportAttribute让MEF知道它们

    [Export(typeof(IPlugin))]
    public class Plugin : IPlugin
    
  • 这应该是个好主意

    对于应用程序:

  • 声明一个集合,该集合将接收MEF可以找到的插件列表,不要忘记ImportManyaAttribute

    [ImportMany(typeof(IPlugin))]
    public IEnumerable<IPlugin> Plugins{ get; set; }
    
  • 施展魔法。 当然,
    this
    应该是具有该
    ImportManyAttribute
    的对象

    container.ComposeParts(this);
    

  • MEF将使这项工作变得非常容易和顺利

    对于插件:

  • 为你的插件创建一个接口。 它实际上并不需要非常复杂,尽管您可以使用它来强制开发人员添加一些描述或版本信息,当然还有一个接收集合并对其进行转换的方法

  • 插件应该使用ExportAttribute让MEF知道它们

    [Export(typeof(IPlugin))]
    public class Plugin : IPlugin
    
  • 这应该是个好主意

    对于应用程序:

  • 声明一个集合,该集合将接收MEF可以找到的插件列表,不要忘记ImportManyaAttribute

    [ImportMany(typeof(IPlugin))]
    public IEnumerable<IPlugin> Plugins{ get; set; }
    
  • 施展魔法。 当然,
    this
    应该是具有该
    ImportManyAttribute
    的对象

    container.ComposeParts(this);