从插件访问C#中的第三方NameSpaces

时间:2011-09-06 02:12:57

标签: c# plugins dll namespaces

我必须继续其他人的C#项目,但我无法与他交谈。

NameSpace A的主程序使用DL​​L与NameSpaces B C D ...

这个主程序在运行时加载插件DLL,这些DLL必须访问NameSpaces A B C D ......

但问题是DLL只能访问NameSpace A!

插件引用了主exe。

非常奇怪的是,我从主程序中获得的已编译的exe(最新版本),确实在项目NameSpaces ABCD的插件DLL的对象浏览器中有引用,但是当我编译主程序exe时我自己DLL只能看到NameSpace A!

我拥有所有NameSpaces的所有项目的来源。

任何帮助都会受到热烈欢迎,这让我疯狂!

1 个答案:

答案 0 :(得分:2)

...these plugin DLLs must access NameSpaces A B C D

The plugins have a reference to the main exe

也许缺少信息,或者我缺乏睡眠,但这肯定是一个奇怪的“插件模型”。不幸的是,我不知道更多,可能还有更多,我不知道如何帮助你当前的情况。

那就是说,我高度建议考虑重新设计你的插件。之一:

  1. 让它们成为实际项目的一部分或者;
  2. 将它们转换为更传统的插件模型。
  3. 如果你选择2号门,this Application Block article涵盖了我认为的传统插件模型,如果你采用它,可能会让你的生活更轻松。

    编辑:我刚刚意识到我的回答可能过于简短,并没有解释“传统插件模型”的含义。

    插件不应直接引用您的应用程序 ,也不需要重建或重新部署才能使用它们。通常,您将在一个项目中定义一个接口(有时称为Separated Interface),但要单独实现它。换句话说,插件可以知道包含接口的核心库,但不必知道使用它的主要可执行文件。

    因此在实践中,您在核心库中定义了一个接口,用于定义应用程序从插件中获取的方法。然后,您可以针对该接口编写主应用程序。然后,在主应用程序的运行时初始化期间,您可以加载包含插件类的程序集并实例化插件,甚至在开发期间将其初始化为测试类。关于如何执行此操作的示例很多,并且还有一个few questions on SO