如何在StructureMap中发布HybridHttpOrThreadLocalScoped对象?

时间:2011-06-21 11:39:24

标签: c# .net asp.net nhibernate structuremap

在Windows服务中执行后台任务时,我使用HybridHttpOrThreadLocalScoped来存储NHibernate ISessions的内容。

由于在Windows Server中没有HTTPContext,我想知道只调用ReleaseAndDisposeAllHttpScopedObjects()是否足以释放该线程的ISession实例?

1 个答案:

答案 0 :(得分:15)

我发现了如何回答这个问题。 ObjectFactory公开的ReleaseAndDisposeAllHttpScopedObjects()方法实际上与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()方法。我希望这有助于某人。