我将 ASP.NET MVC 3 与 Ninject 和 NHibernate 一起使用。
当想到 DI 时,我认为获得资源的人也确保关闭它(在这种情况下 Ninject 应该负责)
但我不确定 Ninject 在使用 InRequestScope 时如何工作。
我的代码是:
Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSession()).InRequestScope();
我打开一个会话并将其放入 I InRequestScope 中,但是当 ISession 超出请求范围时,Ninject 会关闭它吗?
如果我正确理解代码,答案是肯定的。 Ninject 使用的 ActivationStrategies 之一是 DisposableStrategy,其 Deactivate 方法对任何实现 IDisposable 的对象调用 Dispose。如果您使用 Ninject.Web.MVC 扩展,OnePerRequestModule 将自动清除绑定缓存。这将调用所有 ActivationStrategies(包括 DisposableStrategy)上的 Deactivate 方法。
由于 ISession 实现了 IDisposable,因此它将被释放。 ISession 的默认实现 SessionImpl 在 Dispose 时关闭会话。
如果您不使用 Ninject.Web.MVC 扩展,缓存最终将被清除,但可能不会在 EndRequest 时发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)