我們已經設置了一個WCF服務,該服務使用Unity Container來解析用於管理Exchange 2010 Powershell命令的實例。我們定義了一個具有實現IDisposable的具體實現的IExchangePowershell接口。一段時間後,我們遇到了問題,我們無法執行powershell命令了,因爲服務器說已經有太多的PowerShell會話打開了。看來,我們從來沒有真正處理過我們的PowerShell實例。具體Powershell的Dispose()方法將負責關閉運行空間和會話。一旦我在存儲庫方法中調用它,我們不會再有錯誤了。WCF,Unity:拆卸一次性實例
((IDisposable)this.powershell).Dispose();
當然現在我不想顯式調用部署在每一個存儲庫的方法。我認爲團結可以照顧這一點。我們的WCF實例提供這樣處理:
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
container.Teardown(instance);
}
但是,這並沒有真正處置IExchangePowershell實例。你有什麼想法我可以自動處理這些實例嗎?
+1。我認爲使用子容器是一個很好的解決方案。我見過那些反對它的人,因爲他們不喜歡依賴DI容器,但是我個人會認爲,如果這需要解決一個問題。 – 2011-04-20 09:22:45
對於將HiearchicalLifetimeManager放到WCF的位置有什麼建議嗎?截至目前,我正在我的服務主機工廠創建我的Unity容器並從那裏進行配置。 – hoetz 2011-04-20 09:32:25
那麼這取決於你如何解析對象以及你解決什麼樣的對象。例如,我實現了自定義的'IInstanceProvider'來通過構造函數注入解決整個服務及其所有依賴關係。在這種情況下,實例提供程序是您應該在子容器上創建子容器和解析服務的地方。 – 2011-04-20 09:56:56