管理上下文生命周期和IoC容器

时间:2017-04-04 19:41:32

标签: c# entity-framework dbcontext

我正在研究MVC风格的WinForms应用程序,使用Entity Framework并使用Unity将DbContext注入到我的Repository对象中。我在确定如何管理DbContext生命周期时遇到问题,同时也正确处理了我的IoC容器的范围和生命周期。

每个表单后面都有一个控制器。每个控制器都会注入其服务依赖项。每个服务都将其存储库注入为依赖项。每个存储库都会注入DbContext

例如,如果我有一个用户可以输入订单的表单,则代码结构如下所示

public class OrderRepository : IOrderRepository
{
   private readonly MyContext context;
   public OrderRepository(MyContext context)
   {
      this.context = context;
   }
}

public class OrderService : IOrderService
{
   private readonly IOrderRepository orderRepository;
   public OrderService(IOrderRepository orderRepository)
   {
      this.orderRepository = orderRepository;
   }
}

public class OrderController
{
   private readonly IOrderService orderService;
   public OrderController(IOrderService orderService)
   {
      this.orderService = orderService;
   }
}

使用WinForms实体框架的一般建议似乎是为每个表单创建一个DbContext。另外,我的一个控制器有一个计时器,可以在预定的时间触发异步任务,我希望每个任务都使用单独的DbContext

为了为每个新表单及其控制器(以及其中一个控制器中的每个异步任务)创建新的OrderServiceOrderRepositoryMyContext,我&#39 ;每次打开新表单时以及每次创建异步任务时都必须创建新的UnityContainer,否则我必须全局存储UnityContainer。可以全局存储UnityContainer,还是有更好的方法可以做到这一点?

0 个答案:

没有答案