【发布时间】:2014-02-28 22:25:36
【问题描述】:
我已配置我的 IoC 容器 Unity 以在我的工作单元的构造函数中解析我的 IDbContext 和 EntityFramwork DbContext。
我想知道这是否是最佳实践,或者我是否只是在为未处置的 DbContext 感到头疼。这是一个 ASP.Net MVC 应用程序,因此会有很多寿命短的容器。每个容器的生命周期是每个请求
有什么建议吗?
public class UnitOfWork : IUnitOfWork
{
private readonly IDbContext context;
public UnitOfWork(IDbContext context)
{
this.context = context;
}
}
public class SampleService : ISampleService
{
private readonly IUnitOfWork unitOfWork;
public SampleService(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
}
【问题讨论】:
-
你当然不应该为每个请求构建一个容器,因为这会对你的应用程序的性能和配置的复杂性产生严重的负面影响。使用 Unity 的子容器功能很好,尽管通常仍然不需要并且性能很重。
-
IoC 容器不是按请求构建的,IoC 容器是一次构建的,就好像应用程序的生命周期一样。我的
DbContext是每个请求,所以每个服务调用将只有一个 IUnitOfWork,所以所有相同的 DbContext。每个服务调用都被视为单线程。
标签: entity-framework orm inversion-of-control unity-container