我目前正在用 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
对所有顺序数据库调用使用完全相同的对象。
- 有没有更好的方法将对象的生命周期与
HttpContext
? - 是否可以使用 Unity(DI/IoC 框架)来做到这一点?