每个HttpContext实例一个对象

时间:2011-12-02 21:06:19

标签: c# asp.net-mvc unity-container object-lifetime

我目前正在ASP.NET MVC中编写一个项目。我有一个Web项目和DB项目,它只与DB一起使用。这些层看起来像这样,它们只与兄弟层互操作。

数据库项目(EF CF) - 发出数据库请求

存储库 - 抽象底层数据库模型

服务 - 所有业务逻辑都在这里发生。

ASP.NET MVC Web应用程序 - 前端演示文稿

它们必须松散耦合,因此我使用的是Unity DI / IoC框架

我想要实现的是为每个http请求创建一个DbContext实例。以下是我到目前为止实施的逻辑。

public class MyAppBaseController : Controller {
    protected override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (HttpContext.Items["DbModel"] == null) {
            HttpContext.Items["DbModel"] = MySingleton.Container.Resolve<DbContext>();
        }
        base.OnActionExecuting(filterContext);
    }
}

如果当前Items的{​​{1}}词典没有HttpContext,请求管道中的内容就是增加一个。所有控制器都继承自它。我这样做的原因是,在执行期间将调用的所有存储库应该对所有顺序数据库调用使用完全相同的DbContext对象。

  1. 是否有更好的方法将对象的生命周期与DbContext相结合?
  2. 是否可以使用Unity(DI / IoC框架)来完成?

1 个答案:

答案 0 :(得分:1)

您可以按照指定的here

控制Unity的对象生命周期管理中依赖项的实例生命周期

你必须自己编写,在httpcontext

中注入你的对象实例