0

我一直在考虑如何在分层应用程序中使用DbContextper的一个实例。HttpRequest我想出的解决方案之一是创建一个在事件处理程序HttpModule中初始化上下文的实例,然后在事件处理程序中处理它。HttpContext.Current.ItemsBeginRequestEndRequest

不过,上述方法带来了一个问题:我需要在我的数据层和业务层中引用 System.Web 以获取存储的DbContext实例。这可能没问题,但我宁愿避免走那条路。如果我想从非 Web 应用程序中引用和使用我的数据层和业务层怎么办?

有任何想法吗?

4

2 回答 2

1

您可以使用依赖注入。只需IContextHolder使用方法创建接口以获取上下文并将实例从 Web 应用程序注入到您的较低层。对于不同类型的应用程序,此接口的实现会有所不同——它将为您的上下文实例包装对真实存储的访问。

于 2012-11-27T09:19:27.367 回答
0

最简单的解决方案之一是将对数据上下文的访问包装在外观/网关类的静态属性中。

这样,在 Web 应用程序中,属性可以访问HttpContext.Current.Items并存储上下文。另一方面,如果缺少 http 上下文,您可以为非 Web 应用程序实施任何其他生命周期管理策略。

public static TheDbContext Current {
  get {
     if ( HttpContext.Current != null ) {
        // lifetime management for a web app
        // e.g. with the Items container
     }
     else {
        // lifetime management for a non-web app
     }
  }
}

外观本身不必是数据层的一部分,因此您不必System.Web在数据层中引用。

于 2012-11-27T09:23:32.693 回答