如何在多个程序集上共享接口

本文关键字:共享 接口 程序集 | 更新日期: 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/