2012-05-25 27 views
0

我們目前正在評估是否可以將Ninject用於未來的項目。一個條件是,庫文件不應該強制我們調用Dispose方法。那真的有必要嗎?不會調用它導致內存泄漏和其他醜陋的東西?Ninject的Dispose方法真的有必要嗎?

+0

你永遠不會被迫打電話處置。不叫它永遠不會造成泄漏,終結者會在你之後清理。你只是跑胖,懶惰,你可以通過購買更昂貴的電腦輕鬆解決問題。 –

回答

3

我不認爲Ninject是一個純粹的管理解決方案,如果您不調用Dispose(),將會出現內存泄漏或其他問題。特別是因爲你只會在終止一個應用程序之前調用內核的Dispose()方法作爲最後一件事情之一,所以內存將被GC或OS的進程隔離收回。

您希望允許調用Dispose()的IoC容器的原因是,它將在實現IDisposable的任何服務提供者上調用Dispose()。我相信這是一個有用的功能,因爲服務提供商可能擁有非託管資源,或者需要等待異步操作完成(或至少以有序的方式中止它們)。

我會盡力而爲,這是大多數在其內核/提供者/定位器類上實現IDisposable的IoC容器背後的原因。

爲什麼Dispose()在IoC容器上對您有問題?到目前爲止,我總是找到一個合適的地方來調用它,無論是在控制檯應用程序,基於XAML的WPF應用程序還是Xbox遊戲。

+0

配置對我來說不是問題,但對於其他人來說顯然是一個問題。 –

+0

您在整個應用程序中只對內核調用一次Dispose。哪裏有問題? –

+0

然後,我認爲找出那些其他人的擔憂是個好主意。如果他們認爲IDisposable是一種代碼異味,那麼從設計的角度來看,你已經有了很好的推理。 – Cygon

3

您可以配置Ninject以幫助您處理Dispose。這取決於什麼範圍和什麼策略您使用Ninject。 例如:

相關問題