【问题标题】:C# create DLL Plugin that implements interfaceC#创建实现接口的DLL插件
【发布时间】:2011-07-18 19:51:02
【问题描述】:

我正在编写一个基于插件的简单程序。我有一个接口IPlugin,它有一些方法和功能,在我的主程序中有一个List<Plugin>。为了简单起见,假设它是这样定义的:

public interface IPlugin
{
    public void OnKeyPressed(char key);
}

每次按下一个键时,我都会遍历插件列表,并在每个插件上调用OnKeyPressed(c)

我可以像这样创建一个类,并将其添加到列表中...

public class PrintPlugin
{
    public void OnKeyPressed(char key)
    {
        Console.WriteLine(c);
    }
}

然后每当你按下一个键,它就会被打印出来。但我希望能够从 DLL 文件加载插件。 This link 很有帮助,但它没有解释如何让 DLL 中的类实现我的 IPlugin 接口......我该怎么做?真的不想每次做插件都要复制IPlugin.cs文件...

【问题讨论】:

  • 你可以添加对你的库的引用,因为你可以使用你的插件界面。
  • 我希望能够在运行时加载它们,以便用户可以创建自己的插件。
  • 那么你应该创建一个类似List<Plugin>的属性,这样用户就可以将他们的插件添加到你的列表中。
  • 如果您阅读原始帖子,我已经拥有其中之一。我的问题是,我希望插件编写者能够在他们的插件中实现我的IPlugin 接口。
  • 您应该将您的 IPlugin 程序集分享给plugin writers

标签: c# dll load


【解决方案1】:

如果我理解正确的话......

创建 3 个项目:

项目 1:你的主程序(里面有 List 的那个)

项目 2:与您的界面的项目

public interface IPlugin
{
public void OnKeyPressed(char key);
}

项目 3:一个示例插件

public class PrintPlugin : IPlugin
{
public void OnKeyPressed(char key)
{
    Console.WriteLine(c);
}
}

然后添加项目 2 作为对项目 1 和 3 的引用。

通过这种方式,您可以与主项目和任何插件共享界面。

我已经在几个项目中使用了它,它对我很有帮助。

【讨论】:

    【解决方案2】:

    您可能还想查看Managed Extensibility Framework。它为编写基于插件的程序提供了一个完整的 API,如果您打算将插件 API 提供给第三方,它会涵盖很多问题,例如安全性。

    【讨论】:

      【解决方案3】:

      如果您需要加载用户定义的插件,您应该在应用程序启动(或任何其他操作)时搜索新的 DLL。这可以通过使用来完成:

      1)AppDomain.CurrentDomain.GetAssemblies()方法返回当前AppDomain中加载的程序集列表

      2) 搜索应放置插件的文件夹中的所有 DLL,并检查某个程序集是否在列表中。如果没有,使用Assembly.Load方法加载这个程序集,在里面找到IPlugin类,最后添加到List对象中。

      【讨论】:

        猜你喜欢
        • 2011-06-13
        • 2013-11-25
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        相关资源
        最近更新 更多