Structuremap处理DataContext对象

Pet*_*Lim 7 structuremap asp.net-mvc dispose

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

这是我的设置

ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();
SelectConstructor<MyDataContext>(() => new MyDataContext());
Run Code Online (Sandbox Code Playgroud)

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

Lef*_*tyX 9

我就是做这个的:

    For<IUnitOfWork>()
        .HybridHttpOrThreadLocalScoped()
        .Use<BpReminders.Data.NH.UnitOfWork>();

    For<ISession>()
        .HybridHttpOrThreadLocalScoped()
        .Use(o => ((BpReminders.Data.NH.UnitOfWork)o.GetInstance<IUnitOfWork>()).CurrentSession);
Run Code Online (Sandbox Code Playgroud)

和......

protected void Application_EndRequest(object sender, EventArgs e)
{
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
Run Code Online (Sandbox Code Playgroud)

HybridHttpOrThreadLocalScoped在可用时使用HttpContext.

然后,StructureMap会查找所有内容.请记住在您的课程中实现IDisposable.


PHe*_*erg 4

不,它不会自动处理它,除非您使用嵌套容器并处理保存上下文实例的容器。由上下文的创建者来处理它。创建者通常是代码调用的一部分ObjectContext.GetInstance<MyDataContext>,或者是使 StructureMap 将 DataContext 注入到对象之一的根方法。

常见的做法是为每个 HttpRequest 创建一个上下文,并在请求结束时释放该上下文。