在我使用的 Windows 服务中执行后台任务时HybridHttpOrThreadLocalScoped
用于存储 NHibernate ISession 的实例。
由于 Windows Server 中没有 HTTPContext,我想知道是否只调用ReleaseAndDisposeAllHttpScopedObjects()
足以释放该线程的 ISession 实例吗?
我找到了如何回答这个问题。这ReleaseAndDisposeAllHttpScopedObjects()
ObjectFactory 公开的方法实际上与 HttpContext 以及 Web 应用程序有关。
Structuremap.Pipeline 命名空间中的 HybridLifeCycle 类允许直接访问 ThreadLocal 存储内的缓存对象并处置它们。这是一个例子:
Action.For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
上面的代码注册了提供的类型并将其实例缓存在 HttpContext 或 ThreadLocal 存储中。从 IDisposable 继承这些类型始终是一个好主意。因此,在此示例中 UnitOfWork 也是一个 IDisposable。
new HybridLifecycle().FindCache().DisposeAndClear();
现在,无论是 Web 应用程序还是 Windows 服务,要处置缓存的对象,上面的行都足以处置 UnitOfWork 而不是ReleaseAndDisposeAllHttpScopedObjects()
方法。我希望这可以帮助别人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)