C#create DLL插件实现接口

时间:2011-07-18 19:51:02

标签: c# dll load

我正在编写一个简单的基于插件的程序。我有一个接口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文件......

3 个答案:

答案 0 :(得分:6)

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

创建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的参考。

这样您就可以与主项目和任何插件共享界面。

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

答案 1 :(得分:2)

您也可以查看Managed Extensibility Framework。它提供了一个完整的API,用于编写基于插件的程序,并且如果您打算将插件API提供给第三方,则可以解决诸如安全性等诸多问题。

答案 2 :(得分:0)

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

来完成

1)AppDomain.CurrentDomain.GetAssemblies()方法返回当前AppDomain

中已加载程序集的列表

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