如何在StructureMap中发布HybridHttpOrThreadLocalScoped对象?
在Windows服务中执行后台任务时,我使用HybridHttpOrThreadLocalScoped
存储NHibernate ISessions的内容。
由于在Windows Server中没有HTTPContext,我想知道只调用ReleaseAndDisposeAllHttpScopedObjects()
是否足以释放该线程的ISession实例?
我发现了如何回答这个问题。 ObjectFactory公开的ReleaseAndDisposeAllHttpScopedObjects()
方法实际上与HttpContext有关,因此也与Web应用程序有关。
Structuremap.Pipeline命名空间中的HybridLifeCycle类允许直接访问ThreadLocal存储中的缓存对象并进行处置。 这是一个例子:
Action.For().HybridHttpOrThreadLocalScoped().Use();
上面的代码注册了提供的类型,并将其实例缓存在HttpContext或ThreadLocal存储中。 从IDisposableinheritance这些类型总是一个好主意。 因此,在此示例中,UnitOfWork也是IDisposable。
new HybridLifecycle().FindCache().DisposeAndClear();
现在要处理与Web应用程序或Windows服务无关的缓存对象,上面的行足以处理UnitOfWork而不是ReleaseAndDisposeAllHttpScopedObjects()
方法。 我希望这可以帮助别人。