【发布时间】:2017-12-22 20:52:56
【问题描述】:
我有一个应用程序并希望集成其他人为此应用程序编写插件的可能性。我的第一种方法是这样的:
Creating a simple plugin mechanism
我还需要从我的插件访问主应用程序的类和对象。目前我通过在插件项目中添加整个 MyApplication.exe 作为参考然后引用“使用 MyApplication;”来做到这一点。
有没有更好的方法来实现这个功能?如何在插件项目中使用我的主应用程序中的对象等而不引用整个应用程序?
实际上,我不想在自己的 dll 中将整个类与我的主应用程序分开。我可以构建类似“dummy-dll”的东西,它只使插件项目的对象等在没有整个实现的情况下为人所知吗?主要实现应该保留在主应用程序中,我只需要可以从我的插件项目中的主应用程序中引用对象等的东西。
更新:
我已经尝试了以下选项:
插件项目中应该可用的每个类都更改为部分类。然后我创建了一个新的类库项目并添加了这些部分类的副本,删除了详细的实现并创建了 dll。我将 dll 添加到插件项目中。这些类现在可用,但是当我启动我的主应用程序时,出现了一个“FileNotFoundException”,表示找不到文件或程序集。
为插件项目中应可访问的每个类创建了一个接口。问题是通过接口表示的类之一是抽象的(并且必须保持抽象),并且在这个类中创建了另一个类的新实例,该实例也在新的“接口项目”中引用。但是在 C# 中,不可能向接口添加构造函数。所以如果我想通过插件项目中的接口引用这个抽象类的方法,总是会出错。
有人向我简单解释一下如何在插件项目中访问 mainApplication 的对象/类?
【问题讨论】:
-
使用接口。
-
我已经使用了一个接口,就像上面链接中显示的一样。但这样我就无法“看到”插件项目中主应用程序的所有对象。
-
您可以将类声明为部分类,然后在 dll 中使用相同的命名空间并为类创建部分虚拟对象。
-
从您要发布到单独程序集中的插件的所有类中提取接口,然后通过插件中的接口注入您的类。
标签: c# dll plugins static-methods static-classes