我正在研究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
。
为了为每个新表单及其控制器(以及其中一个控制器中的每个异步任务)创建新的OrderService
,OrderRepository
和MyContext
,我&#39 ;每次打开新表单时以及每次创建异步任务时都必须创建新的UnityContainer
,否则我必须全局存储UnityContainer
。可以全局存储UnityContainer
,还是有更好的方法可以做到这一点?