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