Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#创建实现接口的DLL插件_C#_Dll_Load - Fatal编程技术网

C#创建实现接口的DLL插件

C#创建实现接口的DLL插件,c#,dll,load,C#,Dll,Load,我正在写一个简单的基于插件的程序。我有一个接口IPlugin,它有一些方法和功能,在我的主程序中有一个列表。为了简单起见,我们将其定义如下: public interface IPlugin { public void OnKeyPressed(char key); } 每次按下一个键,我都会循环浏览插件列表,并对每个插件调用OnKeyPressed(c) 我可以创建这样的类,并将其添加到列表中 public class PrintPlugin { public void On

我正在写一个简单的基于插件的程序。我有一个接口
IPlugin
,它有一些方法和功能,在我的主程序中有一个
列表
。为了简单起见,我们将其定义如下:

public interface IPlugin
{
    public void OnKeyPressed(char key);
}
每次按下一个键,我都会循环浏览插件列表,并对每个插件调用
OnKeyPressed(c)

我可以创建这样的类,并将其添加到列表中

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

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

如果我理解正确的话

创建3个项目:

项目1:您的主程序(包含列表的程序)

项目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中已加载程序集的列表


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

您可以添加对库的引用,并且可以使用插件接口。我希望能够在运行时加载它们,这样用户就可以创建他们自己的插件。然后你应该创建一个属性,如
列表
,这样用户就可以将他们的插件添加到你的列表中。如果你阅读了原始文章,我已经有了一个插件。我的问题是,我希望插件编写器能够在其插件中实现我的
IPlugin
接口。您应该将您的IPlugin程序集共享给
插件编写器。