Structuremap处理DataContext对象

时间:2011-02-16 10:38:15

标签: asp.net-mvc structuremap dispose

我想确定每个请求结束后,structuremap是否会处理我的DataContext。

这是我的设置

ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();
SelectConstructor<MyDataContext>(() => new MyDataContext());

结构图会自动处理我的datacontext还是需要手动调用Dispose?

2 个答案:

答案 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创建上下文,并在请求结束时处理上下文。