c#创建DLL插件,实现接口
本文关键字:实现 接口 插件 创建 DLL | 更新日期: 2023-09-27 18:02:47
我正在写一个简单的基于插件的程序。在我的主程序中,我有一个接口IPlugin
,它有一些方法和功能,还有一个List<Plugin>
。为简单起见,我们设它是这样定义的:
public interface IPlugin
{
public void OnKeyPressed(char key);
}
每次按下一个键,我循环遍历Plugin列表,并对每个键调用OnKeyPressed(c)
。
我可以像这样创建一个类,并将其添加到列表中…
public class PrintPlugin
{
public void OnKeyPressed(char key)
{
Console.WriteLine(c);
}
}
然后当你按下一个键时,它就会被打印出来。但我希望能够从DLL文件加载插件。这个链接是有帮助的,但它没有解释如何在DLL中实现我的IPlugin
接口的类…我该怎么做呢?我真的不想每次都复制IPlugin.cs
文件,我想做一个插件…
如果我没理解错的话…
创建三个项目:
项目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的引用。
这样,您可以与主项目和任何插件共享界面。
我已经在几个项目中使用了它,它对我很有帮助。
您可能还想研究一下托管可扩展性框架。它为编写基于插件的程序提供了一个完整的API,并且如果你打算将插件API提供给第三方,它涵盖了很多问题,比如安全性。
如果您需要加载用户定义的插件,您应该在应用程序启动(或任何其他操作)时搜索新的dll。这可以通过使用:
1) AppDomain. currentdomain . getassemblies()方法返回当前AppDomain中加载的程序集列表
2)搜索插件所在文件夹中的所有dll,检查某个程序集是否在列表中。如果没有,请使用程序集。方法加载此程序集,在其中找到IPlugin类,最后将其添加到List对象。