我們目前正在評估是否可以將Ninject用於未來的項目。一個條件是,庫文件不應該強制我們調用Dispose方法。那真的有必要嗎?不會調用它導致內存泄漏和其他醜陋的東西?Ninject的Dispose方法真的有必要嗎?
回答
我不認爲Ninject是一個純粹的管理解決方案,如果您不調用Dispose(),將會出現內存泄漏或其他問題。特別是因爲你只會在終止一個應用程序之前調用內核的Dispose()方法作爲最後一件事情之一,所以內存將被GC或OS的進程隔離收回。
您希望允許調用Dispose()的IoC容器的原因是,它將在實現IDisposable的任何服務提供者上調用Dispose()。我相信這是一個有用的功能,因爲服務提供商可能擁有非託管資源,或者需要等待異步操作完成(或至少以有序的方式中止它們)。
我會盡力而爲,這是大多數在其內核/提供者/定位器類上實現IDisposable的IoC容器背後的原因。
爲什麼Dispose()在IoC容器上對您有問題?到目前爲止,我總是找到一個合適的地方來調用它,無論是在控制檯應用程序,基於XAML的WPF應用程序還是Xbox遊戲。
配置對我來說不是問題,但對於其他人來說顯然是一個問題。 –
您在整個應用程序中只對內核調用一次Dispose。哪裏有問題? –
然後,我認爲找出那些其他人的擔憂是個好主意。如果他們認爲IDisposable是一種代碼異味,那麼從設計的角度來看,你已經有了很好的推理。 – Cygon
您可以配置Ninject以幫助您處理Dispose。這取決於什麼範圍和什麼策略您使用Ninject。 例如:
- Ninject disposes every Disposable object that has another scope other than
InTransientScope
as soon as the scope object to which the created object is tied is collected by GC., - 單身時將內核配置進行佈置,
- 你也可以使用
OnDeactivation
方法或InScope(x => new DisposableStrategy())
- 或者使用
StandardScopeCallbacks.Request
使你的對象與HttpRequest
處理。這對於Web應用程序很有用。
- 1. CDATA真的有必要嗎?
- 2. KillTimer真的有必要嗎?
- 3. Cassandra中的UUID真的「有必要嗎?」
- 4. 準則對於Dispose()方法和Ninject
- 5. Hibernate HQL:JOIN真的有必要嗎?
- 6. NHibernate - ITransaction.Commit真的有必要嗎?
- 7. 打字屬性真的有必要嗎?
- 8. 真的有必要使用Modernizr嗎?
- 9. 如果我有一個Dispose方法,我必須實現IDisposable嗎?
- 10. 的DataContext沒有Dispose()方法
- 11. 我真的需要在每個Principal上調用Dispose()嗎?
- 12. iPhone 5優化要求 - 啓動映像真的有必要嗎?
- 13. MySQL查詢中的表和列引號真的有必要嗎?
- 14. 引用url()的值真的有必要嗎?
- 15. 把std :: move裏面的lambda真的有必要嗎?
- 16. 我的中層MSMQ隊列真的有必要嗎?
- 17. LTL關於Fp = TUp,在重寫F時真的有必要嗎?
- 18. 身體包裝div真的有必要嗎?
- 19. Android Notepadv3教程 - saveState()在onSaveInstanceState中真的有必要嗎?
- 20. 何時使用AtomicReference(Java)?它真的有必要嗎?
- 21. 給_freea打電話真的有必要嗎?
- 22. 調用java.lang.Object構造函數真的有必要嗎?
- 23. C++函數原型真的有必要嗎?
- 24. PayPal Pro:信用卡驗證真的有必要嗎?
- 25. 散列會話指紋真的有必要嗎?
- 26. 框架對於這個問題真的有必要嗎?
- 27. GoogleCloudMessaging Android客戶端:IntentService真的有必要嗎?
- 28. 這是使用Dispose方法的正確方法嗎?
- 29. 必要性Dispose方法的嘲笑EF核心與內存供應商
- 30. OpCodes.Castclass。有必要嗎?
你永遠不會被迫打電話處置。不叫它永遠不會造成泄漏,終結者會在你之後清理。你只是跑胖,懶惰,你可以通過購買更昂貴的電腦輕鬆解決問題。 –