WCF Windsor集装箱登记

时间:2012-03-29 13:17:09

标签: wcf dependency-injection inversion-of-control castle-windsor

我的目标是为我的非http WCF服务注册一个Windsor容器。但是,我似乎无法确定将代码注册和初始化容器的位置。

我试过放......

Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration"

...在我的.svc文件中的ServiceHost声明中,但是这似乎不会导致我的Global.asax.cs中的Application_Start()方法被触发。

我也尝试在类中放入一个静态方法,如下所示......

public static void AppInitialize()
{
}

...但是这种方法也不会触发。

从Castle Windsor收到的方法是......

  

内核为空,你忘了打电话了   DefaultServiceHostFactory.RegisterContainer()?

我真的可以使用代码一个示例来准确显示注册容器的位置。另外我在哪里处理容器。

感谢。

3 个答案:

答案 0 :(得分:1)

这不是AppInitialize问题。你应该确保做的事情是将Castle.Facilities.WcfIntegration.WcfFacility添加到你的容器中:

container.AddFacility<Castle.Facilities.WcfIntegration.WcfFacility>();

添加完毕后,所有内容都可以正常工作而不会出现此异常。

  • 杰森

答案 1 :(得分:0)

您是否尝试过静态构造函数而不是静态方法?

类似

static MyClass()
{
  // setup windsor
  WindsorContainer windsorContainer = new WindsorContainer();
  ..

}

有人已经准确地讨论了你想要用StructureMap实现的目标 - 应该很容易换掉那些用于温莎位......

http://lostechies.com/jimmybogard/2008/07/30/integrating-structuremap-with-wcf/

答案 2 :(得分:0)

我知道这是在前一段时间被问过的,但这里有一些你可能想要检查的陷阱。

  • 您的Global.asax和Global.asax.cs文件是否正确?您的Global.asax是否指向正确的代码隐藏文件?
  • 受保护的void Application_Start(object sender,EventArgs e)方法的签名是否正确?
  • 如果您不在其中添加任何Castle Windsor特定代码,是否可以触发Application_Start()?

可以通过右键单击项目并查找应用程序全局文件来添加Global.asax。确保.asax文件包含

<%@ Application Codebehind="Global.asax.cs" Inherits="YourNamespace.Global" Language="C#" %>

,别无其他。

(如果您在上面找到了解决方案,请添加一个标记作为答案。这对其他人有帮助。)

相关问题