2

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

DB 项目 (EF CF) - 发出 db 请求

Repository - 抽象底层数据库模型

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

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

它们必须松散耦合,所以我使用 Unity DI/IoC 框架

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

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当前的字典HttpContext没有,则在请求管道中DbContext添加一个。所有控制器都继承自它。我这样做的原因是,在执行期间将调用的所有存储库都应该DbContext对所有顺序数据库调用使用完全相同的对象。

  1. 有没有更好的方法将对象的生命周期与HttpContext?
  2. 是否可以使用 Unity(DI/IoC 框架)来做到这一点?
4

1 回答 1

1

您可以在此处指定的统一对象生命周期管理中控制依赖项的实例生命周期

您将不得不编写自己的在 httpcontext 中注入您的对象实例

于 2011-12-02T22:18:13.177 回答