2013-04-17 66 views
0

我們創建了幾個處理異步請求的WCF服務。我們使用的是basicHttpBinding,因此我們的InstanceContextModePerCall,這是造成一些混亂的原因。我們看到使用微軟的Unity容器注入應用程序的部分不尋常行爲。WCF服務中的IoC衝突

我們正在解決下面的參考文獻,以創建在整個應用程序中使用的單個Foo。但是,當服務被快速連續擊中時,Foo偶爾會拋出異常,表明它正在被多個線程訪問,並因此導致其狀態以意外的方式更改。

Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager()); 

現在,如果我們改變生命週期管理器TransientLifetimeManager - 實質上是告訴容器注入每一個它的解決時間類的新實例,這個問題被糾正。

Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager()); 

從我的理解中,WCF不控制的AppDomain的生命週期,主機一樣。在我們的例子中,這是IIS。所以,鑑於這些信息有可能我們的PerCall WCF請求工作正常,但由於AppDomain的管理方式,我們是否可以訪問相同的注入對象,因爲它的單例實現?

謝謝你的時間!

+0

爲單位的IInstanceProvider行爲中創建或者它以不同的方式注入依賴? – ErnieL

回答

0

看看UnityWcf。我已經嘗試了幾種不同的方法來將Unity中對象的生存期與WCF中的InstanceContextMode對齊。這個作品非常好:

http://unitywcf.codeplex.com