0

我们目前正在评估是否可以将 Ninject 用于未来的项目。一个条件是,库不应强迫我们调用 Dispose 方法。那么,真的有必要吗?不调用它会导致内存泄漏和其他丑陋的东西吗?

4

2 回答 2

3

如果您不调用 Dispose(),我认为作为纯托管解决方案的 Ninject 不会出现内存泄漏或其他问题。特别是因为您只会调用内核的 D​​ispose() 方法作为您在终止应用程序之前所做的最后一件事,因此内存将被 GC 或操作系统的进程隔离回收。

您需要一个允许您调用 Dispose() 的 IoC 容器的原因是它将在任何实现 IDisposable 的服务提供程序上调用 Dispose()。我相信这是一个有用的功能,因为服务提供者可能拥有非托管资源或需要等待异步操作完成(或至少以有序的方式中止它们)。

我敢打赌,这就是大多数在其内核/提供者/定位器类上实现 IDisposable 的 IoC 容器背后的原因。

为什么在 IoC 容器上使用 Dispose() 对您来说是个问题?到目前为止,我总是找到一个合适的位置来调用它,无论是在控制台应用程序、基于 XAML 的 WPF 应用程序还是 Xbox 游戏中。

于 2012-05-25T12:28:00.390 回答
3

您可以配置 Ninject 以帮助您使用 Dispose。这取决于您对 Ninject 使用的范围策略。例如:

于 2012-05-25T15:09:21.623 回答