我想确定每个请求结束后,structuremap是否会处理我的DataContext。
这是我的设置
ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();
SelectConstructor<MyDataContext>(() => new MyDataContext());
结构图会自动处理我的datacontext还是需要手动调用Dispose?
答案 0 :(得分:9)
这就是我的所作所为:
For<IUnitOfWork>()
.HybridHttpOrThreadLocalScoped()
.Use<BpReminders.Data.NH.UnitOfWork>();
For<ISession>()
.HybridHttpOrThreadLocalScoped()
.Use(o => ((BpReminders.Data.NH.UnitOfWork)o.GetInstance<IUnitOfWork>()).CurrentSession);
和......
protected void Application_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
HybridHttpOrThreadLocalScoped 在可用时使用 HttpContext 。
然后,StructureMap会照顾一切。 请记住在您的课程中实施 IDisposable 。
答案 1 :(得分:4)
否则不会自动处理它,除非您使用嵌套容器并Dispose容纳上下文实例的容器。它取决于处理它的上下文的创建者。创建者通常是调用ObjectContext.GetInstance<MyDataContext>
的代码的一部分,或者是使StructureMap将DataContext注入其中一个对象的根方法。
通常的做法是根据HttpRequest创建上下文,并在请求结束时处理上下文。