Castle.Windsor新手,只是想檢查一些東西。Castle.Windsor - 瞭解瞬態生活
我一直在閱讀關於瞬態生活方式和「釋放你的決心」 - 我爲ASP.NET MVC3應用程序創建了一個資源提供程序,並在我的新資源提供程序工廠(這是「集線器「在ASP.NET資源訪問):
IContainerAccessor accessor = HttpContext.Current.ApplicationInstance as IContainerAccessor;
IResourceProvider provider = accessor.Container.Resolve<IResourceProvider>(new Arguments(new { resourceName = resourceName }));
LoggerService.Information(String.Format("Tracking? {0}", accessor.Container.Kernel.ReleasePolicy.HasTrack(provider)));
的IResourceProvider
是短暫的,所以我可以通過不同的resourceName
給構造(所以不同的標籤,可以從不同的資源文件返回)。
我擔心我需要顯式調用這些IResourceProvider
對象,但我HasTrack
檢查總是返回false
Release
- 所以我想這是一件好事嗎?
容器沒有跟蹤這個對象,所以GC會(最終清理這個對象)。
當容器跟蹤這個對象時 - 如果它有創建委員會的關注?
感謝Marwijn,但我已經明確要求在示例代碼中使用IResourceProvider - 但它沒有被跟蹤(我認爲這是因爲我已經解決了)。如果我使用類型化工廠,我仍然需要解決工廠問題,所以我沒有以這種方式隱藏容器(我瞭解這對工廠有利?)。但我認爲我明白了你的觀點,通過使用工廠,IResourceProvider創建的工廠擁有工廠,並在工廠發佈後立即發佈。什麼時候發佈類型工廠? – Neil 2013-05-03 15:32:37
你好尼爾,有我有限的信息,我不能真正判斷你是否應該使用工廠。我只想指出,在應用程序中使用多個Resolves是一種反模式。你是對的,容器沒有理由跟蹤你的組件,因爲你沒有分離要求。但是請注意,向具有一個(如IDisposable)的資源提供程序添加依賴關係足以進行跟蹤。我的建議是在保存網站並在完成後發佈。 – Marwijn 2013-05-03 18:09:03
謝謝Marwijn - 非常感謝您的意見。我認爲ASP.NET並沒有提供一個乾淨的鉤子來注入這種資源工廠這一事實並沒有幫助。基本上我試圖做一個這個http:// stackoverflow的溫莎版本。com/questions/10619962/custom-resourceproviderfactory-dependency-injection,但避免服務定位器樣式是可能的。 – Neil 2013-05-03 19:52:18