如何在多个程序集上共享接口
本文关键字:共享 接口 程序集 | 更新日期: 2023-09-27 17:59:17
你好
我有一个主应用程序,它将在中包含一些插件/插件目录
每个插件都是一个.NET dll,并且应该具有命名空间"plugin"和类"MainClass",以实现在主应用程序中定义的IPlugin接口
我遇到的问题是,如果没有using
引用,我不知道如何在主应用程序和每个插件之间共享相同的接口?
主要应用程序类的一部分:
object oo = Assembly.LoadFile(path).CreateInstance("Plugin.MainClass");
IPlugin pp = (IPlugin)oo; //Fails if I define the interface in the main app and the plugins
以及第一个插件的一部分:
namespace Plugin
{
public class MainClass : IPlugin //I cannot reference the interface in the main app?
{
public string getName()
{
return "Plugin 1";
}
}
}
您的正确之处在于,要使用接口(或类、结构等),必须引用该程序集。如果你不想让你的插件引用主应用程序(这是有道理的)为什么不为此添加一个新的程序集呢?称其为"framework"或"util"。
E.G
Framework Assembly - IPlugin PluginOne Assembly (references Framework) - PluginOne : IPlugin Main App Exe (references PluginOne & Framework assemblies)
您想要一个类库程序集,该程序集只包含主应用程序和插件所基于的接口。
关于这一点的一点:
每个插件都是一个.NET dll,并且应该具有名称空间"plugin"和类"MainClass"
除非编写插件的名称空间或类名,否则不能强制执行它们。
如果你发布了接口(正如其他人所建议的那样,从一个单独的程序集发布),并且我实现了你的接口,那么我的命名空间是带MainClass类的插件,还是命名空间是"TheEvilGreebo",类名是"IsGod"都无关紧要。
只要我的"TheEvilGreebo.IsGod"类正确地实现了你的IPlugin,从你作为界面设计师的角度来看,这就是最重要的。
只需在单独的程序集中定义IPlugin
接口。
此外,如果你还没有:http://mef.codeplex.com/