2013-03-16 26 views
6

我正在使用Unity.WCF注入WCF服務的依賴關係。當我將我的服務設置爲InstanceContextMode.Single時發生問題。Unity.wcf和InstanceContextMode.Single

我在Google上發現,當InstanceContextMode設置爲Single時,InstanceProvider未被調用。還有一個解決方法,但我想知道在Unity.WCF中是否有一些內置的支持,因爲顯然這是一個衆所周知的問題。

我在這裏找到信息:Enabling InstanceProvider for singleton services

+0

你可以分享你目前無法使用的代碼嗎?它將使社區能夠更快地幫助你。 – vittore 2013-03-16 18:56:43

回答

7

我會在你問同樣的問題舉Paul Hiles comment

使用InstanceContextMode.Single讓您的業務規模非常糟糕所以最好是在大多數情況下避免,特別是如果只是使用它允許AppFabric的自動啓動。您可以安全地刪除ServiceBehavior屬性並以其他方式執行此操作。

使用Unity.WCF,您可以將初始化代碼添加到在添加Unity.WCF NuGet包時創建的WcfServiceFactory類的方法中。這隻會在服務的整個生命週期內執行一次。

順便說一句,你不應該將Unity容器傳遞給你的服務。將您的服務使用的任何組件添加到構造函數中(例如存儲庫,助手等),然後使用方法向Unity註冊。當你的服務被實例化時,依賴關係將被自動注入。

您還可能會發現articlethis MSDN series有用。

+0

所以它看起來像我能夠刪除InstanceContextMode.Single,並用我的WcfServiceFactory中的ContainerControlledLifetimeManager替換它。我需要singleton的原因是我在單獨的線程中有一個很長的運行操作,我需要偶爾檢查它的狀態。 – mersadk 2013-03-16 20:00:48

+0

爲什麼我不應該將統一容器傳遞給類,如果我需要解決該類(也有依賴)中的多個對象? – mersadk 2013-03-17 12:30:43

+1

因爲你會把兩個不同的責任放在一個班上,這被認爲是不好的設計。一類應該做它的事情,另一類應該配置它。這將使您可以在未來更輕鬆地進行測試。 – vittore 2013-03-17 15:35:14

相關問題