我正在尝试为应用程序编写插件。我唯一提供的是一个定义接口的dll资源文件;这是代码:
using System;
using System.Drawing;
namespace App.Plugin.Resources.Interface
{
public interface IAppPlugin
{
string Name { get; set; }
string Description { get; set; }
string Author { get; set; }
string Version { get; set; }
Icon MenuIcon { get; set; }
EventHandler PluginEventHandler { get; set; }
}
}
然后我创建了一个实现此接口的类,使其显示一个消息框,编译dll,将其放在应用程序的Plugins文件夹中,当应用程序执行并启动插件时,它确实显示了消息。 / p>
在我看来,该软件提供了执行外部代码的方法(通过插件系统),但实际上并不能访问任何应用程序的属性或方法。
考虑到上述情况,我的问题是:我是否能够以任何其他方式与主机进程交互(例如,在选择菜单项时获得通知,或者甚至自己将菜单项添加到主GUI)给定的资源还是这个插件系统只是作为一个应用程序启动器(通过执行我提供的DLL中的代码)?
答案 0 :(得分:2)
这似乎只是一个应用程序启动器,而不是一个真正的插件,除非有一些通过约定实现的策略:也许应用程序使用反射查看插件构造函数,并将一些接口传递给主机系统,或者它寻找一些属性标记了一些自定义属性以传递一些入口点。传递主应用程序入口点的另一个可能的工具是PluginEventHandler
,尝试在调试时看到调用插件时收到的内容。此外,尝试使用一些工具ILspy来查看插件实例化中是否还有其他内容。