如何从Visual Studio 2012中的其他项目动态加载类?

时间:2014-07-10 18:23:52

标签: c# wcf visual-studio-2012

我正在开发一个使用接口(而不是ServiceContract接口)来执行某些内部工作的WCF服务。我的目标是在部署之后通过提供具有实现此接口的类的新DLL(以及相应的web.config更新)来扩展此服务的功能。

我从一个实现接口的类开始。在我的解决方案中,我在一个项目(WCF服务应用程序)中具有接口定义的服务,以及在另一个项目(Windows类库)中实现接口的类。

我使用以下代码动态加载类(基于调用服务时传递的参数):

InterfaceFoo af = (InterfaceFoo)System.Activator.CreateInstance(AssemblyQualifiedName, ClassType).Unwrap();

调用此行时,我收到FileNotFoundException,无法加载文件或程序集。

我相信上面的代码是正确的,因为我在运行时从一个单独的概念验证项目开始工作,一旦它被构建和部署,并且DLL与EXE放在同一个文件夹中。我相信我的问题与我引用项目的方式或我在Visual Studio中运行时传递给CreateInstance()方法的变量有关。

我尝试过但仍然遇到同样的错误:在WCF服务项目中,我将类库项目设置为参考。在WCF服务项目中,我添加了实现类的接口的链接。

我想知道我用于AssemblyQualifiedName和ClassType的值是否在Visual Studio中不起作用,因为它们尚未部署?

即使您认为完全不同的方法更好,任何建议都会受到赞赏。

初次发布后添加: 发布后我有了一个想法,我将实现类的接口从类库项目移动到WCF服务项目。当我这样做时,它的工作原理。那对我来说,消除了汇编和类型参数作为问题,问题是我没有正确链接到类库项目。

1 个答案:

答案 0 :(得分:0)

您可以将界面防御移动到另一个共享库(dll),然后使用它。