好的。所以我想建立一个程序,作为“插件”模块的核心。另一个开发人员可以创建一个 plugin1.dll 并将其添加到“modules”文件夹以增强我的核心应用程序的功能。
因此,可以说我的核心具有以下功能:
例如,我们有上面提到的核心应用程序,有人想要添加一个插件,让用户查看当前时间并将其记录到标准日志.txt 中。
所以他会创建一个具有以下功能的类库:
现在我的问题是,我可以使用反射轻松地从我的核心应用程序中调用插件的功能,但是我怎么会反过来呢?
我的 plugin1.dll 如何访问和调用核心程序的完整设置日志功能?
我希望你能得到我的问题。我希望我的 plugin1.dll 能够作为我的核心类的示例 Logging-methods 调用。
谢谢!
我建议将您的问题分为两个方面:
第一个方面的答案是创建一个单独的接口 dll,它定义了核心应用程序将提供的一个(或多个)接口。请注意,这应该只包含接口定义,不包含实现。然后插件开发人员可以导入该 dll,并针对该接口进行编程(无需依赖于您的完整核心实现)。
第二个方面的答案:您可以要求您的插件公开一个众所周知的初始化入口点。在该方法中,您可以向他们提供对核心实现的引用作为参数,以便他们可以根据需要存储该引用并调用该接口上的方法。
一个简单的示例可能类似于以下内容:
接口dll:
public interface ICoreApplication
{
//These are the methods that you want to provide to your plugins:
void LogMessage(string msg);
//void SomeOtherMethod(...)
//...
}
public interface IPlugin
{
//These are the methods that you expect from your plugins:
void Init(ICoreApplication coreReference);
}
(顺便说一句:IPlugin 接口还可以包含其他方法,如果您已经知道您希望插件提供的功能。在这种情况下,您不必通过反射调用您的插件,而是通过该接口。)
核心应用:
public class Core : ICoreApplication
{
public void InitPlugins()
{
IPlugin somePlugin = ...; //retrieve via reflection
somePlugin.Init(this);
}
}
请注意,这只是一个简单的示例,用于说明基本概念。提供强大的插件架构还有很多。你需要考虑诸如
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句