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