C# 如何在c中创建可插入的GUI和DLL#
不确定这里使用的确切术语,因此,如果您有任何帮助,我们将不胜感激 最简单的是,我有一个表单应用程序。当我加载“form.exe”时,表单有一个控件,一个菜单。此菜单有一个菜单项“退出”。我想要的是,在加载表单时,能够将参数传递给这个表单应用程序,这些参数指定可以添加专门方法、控件等的DLL 现在,当我加载“form.exe add_plugable.dll”时,我的菜单中有另一个菜单项“add”。 当我加载“form.exe add_plugable.dll remove_plugable.dll”时,菜单有3项“Exit”、“add”和“remove” 希望这是有意义的。我需要在表单应用程序中包括什么?如何创建DLL?我知道我需要一个公共接口,但不知道如何通过名称空间、接口和抽象类来实现这一点C# 如何在c中创建可插入的GUI和DLL#,c#,winforms,pluggable,C#,Winforms,Pluggable,不确定这里使用的确切术语,因此,如果您有任何帮助,我们将不胜感激 最简单的是,我有一个表单应用程序。当我加载“form.exe”时,表单有一个控件,一个菜单。此菜单有一个菜单项“退出”。我想要的是,在加载表单时,能够将参数传递给这个表单应用程序,这些参数指定可以添加专门方法、控件等的DLL 现在,当我加载“form.exe add_plugable.dll”时,我的菜单中有另一个菜单项“add”。 当我加载“form.exe add_plugable.dll remove_plugable.dl
谢谢 我建议您调查一下。它就是为这种情况而设计的
例如,它是Visual Studio用于扩展的,因此可以在运行时动态发现和插入外接程序。您可以使用预先编写的框架,但如果您正在寻找“基本”解决方案,请尝试以下方法:
IPlugin
。将接口放在单独的类库中IPlugin
的公共类app.config
读取插件文件和类名,或者根据您的要求通过命名约定计算它们
var pluginAssembly = Assembly.Load(pluginFileName);
var plugin = (IPlugin) pluginAssembly.CreateInstance(pluginClassName);
这些方法有几个重载,允许对过程进行更多控制。例如,您可以使用
AssemblyName
而不是简单的字符串加载插件程序集。在实例化类时,可以指定绑定标志和一组参数值以传递给类的构造函数。这可能是我升级到VS 2010时的解决方案。然而,我目前正在2008年使用.NET3.5。@Tizz从CodePlex站点获取它。在.NET3.5中非常有效:我也发现了这个教程(添加以供参考):非常有用。但愿我能不止一次地投票支持这一点。一个问题。这是否允许我简单地将一个新的DLL(包含一个实现IPlugin
的类)放到应用程序目录中,并让我的应用程序在下次加载时自动发现它?由于新的插件DLL将在以后添加到目录中,因此我没有您上面提到的pluginClassName
参数的值。如何解决这个问题?以及如何知道特定DLL是否包含实现IPlugin
?程序集的类。Load
只会在首次调用DLL时发现它,因此您可以在尝试加载DLL之前随时将其放入目录中。加载后,程序集将在AppDomain的生命周期内缓存在内存中。要刷新缓存,请回收AppDomain。要在不事先知道插件类名称的情况下发现插件类,需要您自己编写相应的逻辑。例如,您可以使用反射来查找程序集中实现插件接口的所有公共类。谢谢Chris。这就是我的结局。