在Windows服务中执行后台任务时,我使用HybridHttpOrThreadLocalScoped
来存储NHibernate ISessions的实例。如何在StructureMap中发布HybridHttpOrThreadLocalScoped对象?
由于在Windows Server中没有HTTPContext,我想知道是否只调用ReleaseAndDisposeAllHttpScopedObjects()
就足以释放该线程的ISession实例?
在Windows服务中执行后台任务时,我使用HybridHttpOrThreadLocalScoped
来存储NHibernate ISessions的实例。如何在StructureMap中发布HybridHttpOrThreadLocalScoped对象?
由于在Windows Server中没有HTTPContext,我想知道是否只调用ReleaseAndDisposeAllHttpScopedObjects()
就足以释放该线程的ISession实例?
我发现如何回答这个问题。 ObjectFactory公开的ReleaseAndDisposeAllHttpScopedObjects()
方法确实与HttpContext相关,因此也与Web应用程序有关。
Structuremap.Pipeline命名空间中的HybridLifeCycle类允许直接访问ThreadLocal存储中的缓存对象并对其进行处置。下面是一个例子:
Action.For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
以上代码寄存器所提供的类型和在的HttpContext或ThreadLocal的存储缓存它的实例。从IDisposable继承这些类型总是一个好主意。因此在这个例子中UnitOfWork也是一个IDisposable。
new HybridLifecycle().FindCache().DisposeAndClear();
立即处置缓存对象的web应用程序或窗口服务的regardsless上面的行足以处置的UnitOfWork代替ReleaseAndDisposeAllHttpScopedObjects()
方法。我希望这可以帮助别人。
谢谢,这真的帮助我! – manu08
你用这个节省了我的一天,谢谢! –
你试过吗?结果是什么? – thekip
我不认为这是。我只是试了一下,得到了一个NullReferenceException,我猜是因为没有HttpContext。所以不,该方法绝对不是释放会话的正确方式。 – Roman