2

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

我试图把...

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

...到我的.svc文件我的ServiceHost声明然而,这似乎并没有引起的Application_Start()方法在我的Global.asax.cs到火。

我也试图把一个类中的静态方法如下...

public static void AppInitialize() 
{ 
} 

...但是这种方法也不会触发。从温莎城堡是收到

的方法...

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

我真的可以用代码的一个例子,显示在哪里注册容器。另外我在哪里处理容器。

谢谢。

+1

你见过这个问题吗? http://stackoverflow.com/q/8789043/23697 – stombeur 2012-04-18 10:14:17

+1

检查@Anton答案是否不正确。也许你真的使用HTTP WCF,因为你提到了global.asax.cs。如果这样的话,认为他的答案是正确如果情况确实如此,我会鼓励他。 – Falcon 2013-09-27 14:53:11

回答

0

你试过一个静态构造函数而不是静态方法吗?

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

} 

有人讨论你正在努力实现只StructureMap什么 - 应该很容易掉出来,对于温莎位....

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

+0

嗨,这里的问题是让IIS管道调用可以用来创建容器的东西。 – Remotec 2012-03-29 13:45:14

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#" %> 

而没有别的。

(如果你发现你的一个解决方案,它添加一个标志是作为一个答案。这将是对他人有帮助。)

+0

Global.asax.cs不用于非HTTP环境。答案是离题。 – Falcon 2013-09-03 13:31:03

+0

@Falcon是的,这是真的。但他有一个Global.asax.cs文件,这有点令人困惑。 – Anton 2013-09-03 14:54:42

1

这不是一个AppInitialize问题。你应该确保你做的是添加Castle.Facilities.WcfIntegration。WcfFacility到您的容器:

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

一旦添加了,所有应该工作,没有得到此异常。

  • 杰森
+0

这解决了我的问题。 – 2015-08-19 18:25:44

相关问题