我需要檢查某個接口的實例是否已經由結構映射創建。我已經嘗試過ObjectFactory.GetInstance(),但是這會在調用時創建一個新的T實例,並且T的具體實例不存在。我只想檢查一個T的實例是否已經被創建(而不是創建一個新的)。我需要這個來強制通過某個類創建實例)。StructureMap - 檢查某個類/接口的實例是否已經創建
回答
如果StructureMap已經創建了接口的實例,則不能問這個StructureMap。
但是,它具有許多生命週期管理功能,可以控制它是創建新實例還是返回先前創建的緩存實例。
您可以告訴StructureMap創建HttpContextScoped實例,以便它爲給定的HTTP請求返回相同的實例。
這聽起來像你真正想知道的是如何用一個StructureMap處理Web應用程序中的NHibernate會話。嘗試: http://trason.net/journal/2009/10/7/bootstrapping-nhibernate-with-structuremap.html
約書亞。現在發現這是不可能的。您提到但可以「控制結構圖是否創建新實例,還是返回先前創建的緩存實例」。如果這是真的,我可以嘗試獲得一個緩存實例。如果它不在容器中,我應該得到一個空對象。你可以給一個小的代碼片段如何做到這一點。至於我的NHibernate問題,我已經解決了它檢查事務是否打開(事務只在一個位置打開)。 – zszep 2012-01-18 12:51:50
至於你提到的例子,我之前已經看到它。我基於以前的會話管理基於類似的示例,但我不喜歡它在每個Web請求前創建NHibernate會話的事實。我嘗試了Ayende的NHibernate profiler(試用版),並且很震驚地看到創建了多少NHibernate會話(即使這樣的會話比較輕微)。即使對於靜態jpeg獲取,也創建了一個會話。 – zszep 2012-01-18 12:59:33
你應該能夠做到這一點使用:
ObjectFactory.Model.InstancesOf<IYourInterface>().First().ObjectHasBeenCreated();
注意,對於辛格爾頓的HttpContext或混合生命週期的情況下,這只是工作。
- 1. 如何檢查類實例是否已創建或爲空C#
- 2. 檢查是否打字稿類已經被實例化
- 3. 檢查類實例是否已經存在
- 4. PHP:檢查一個變量是否是某個類的實例
- 5. StructureMap創建實例
- 6. 如何在運行時檢查某個類是否實現了某個接口?
- 7. TypeScript - 檢查類是否實現接口
- 8. 如何檢查表單的實例是否已經存在?
- 9. 如何檢查一個類是否已經在Python中實例化?
- 10. 檢查CREATE TABLE是否實際創建表或它是否已經存在?
- 11. 創建接口子類的實例
- 12. 創建一個經理類的實例
- 13. Android gps:如何檢查某個點是否已經達到?
- 14. 檢查是否已經定義了某個HTTP標頭
- 15. Java - 如何檢查類是否繼承某些類或接口?
- 16. 在顯示之前檢查是否已經創建了PDF?
- 17. 如何檢查是否不是symfony2中的某個類的實例
- 18. C#如何檢查一個類是否實現泛型接口?
- 19. 如何檢查爲c#中的某個類型創建多少個實例?
- 20. 續集檢查表是否已創建
- 21. 根據類名創建實現接口的類的實例?
- 22. PHP檢查是否實際類實現接口
- 23. Yii2如何檢查兩個模型是否已經鏈接
- 24. Ext.Create創建返回的類已經實例化
- 25. Golang檢查接口類型是否爲
- 26. 多個Tomcat實例:已經在使用的端口:8086(試過檢查server.xml)
- 27. .NET - 創建實現特定接口的每種類型的實例
- 28. 檢查一個類型是否是Haskell中的Show實例?
- 29. 在創建子類實例時是否還創建了超類實例?
- 30. 檢查'onload'是否已經被觸發?
我很好奇,你能解釋一下爲什麼你需要這樣做嗎?如果您需要發現一個實例是否已經創建,可能這表明您正在嘗試管理一個單例,該單元可以配置爲自動執行。 – Clafou 2012-01-16 12:04:41
我想通過一個特定的類強制創建一個NHibernate會話(打開和關閉事務,配置等)。這個類是通過屬性注入創建的。所有其他類(存儲庫)應該只能夠獲得已經創建的ISession。所以我需要調用一些結構映射函數,它只獲取一個已經創建的ISession對象,否則它應該拋出一個錯誤或者返回null。 ...而Session是基於http上下文的,而不是單例。 – zszep 2012-01-16 12:17:24
也許你可以通過創建一個新的類庫來控制對獨特的NHibernate Session的訪問(它可以讓你檢查它是否已經創建並顯式創建)並讓StructureMap將這個存儲庫類型對象注入爲單例? – Clafou 2012-01-16 12:32:32