IoC容器应该解析OR Mapper容器吗?

时间:2013-12-23 20:46:54

标签: entity-framework orm inversion-of-control unity-container

我已经配置了我的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;
    }
}

2 个答案:

答案 0 :(得分:1)

让容器管理IDbContext并设置为PerRequest生存期是最佳做法。您的代码看起来很干净,可以通过IoC容器轻松管理。

作为@Steven linked to,通常的做法是使用该单位或工作并立即处置。

如果可以正确配置Unity IoC容器以在请求结束时处理IDbContext,那么最好。在某些情况下使用ASP.NET,您可能必须在Application_EndRequest()

中进行处理

答案 1 :(得分:1)

我认为您的解决方案很好,但有关在Unity文档中使用每个请求生命周期管理器的警告:Per Request Lifetime Management。我想只要你知道自己在做什么,就会像预期的那样使用那个终身经理。您可以使用的另一个选项是创建基本控制器并在该控制器上实现IDisposable。 MVC将在请求的最后调用dispose,因此您也可以处理任何对象。