使用带有依赖注入的语句

时间:2018-04-17 13:30:19

标签: c# .net entity-framework unit-testing

在我的应用程序中,我使用Entity Framework并希望编写单元测试。

谷歌叔叔告诉我,最好为我的dbContext使用using-statemant。另一方面,我想用依赖注入来模拟我的dbContext。

我该如何解决这个问题?

使用-众所周知声明:

using (var db = new ApplicationDbContext())
            {
                return await db.OrderingEquipments.ToListAsync();
            }

依赖注入:

        public CupsController(IApplicationDbContext db)
    {
        //_context = obj;
    }

2 个答案:

答案 0 :(得分:1)

你可以使用工厂合同;例如:

interface IDbContextProvider
{
    IDbContext Get();
}

这是您向消费者注入的界面。然后使用该提供程序实例获取一次性上下文:

CupsController(IDbContextProvider provider)
{
    using (var context = provider.Get()) 
    {
    }
}

答案 1 :(得分:-1)

您可以直接使用IServiceProvider:创建类的实例:

var context = IServiceProvider.GetType(typeof(IApplicationDbContext));

IServiceProvider实例应位于您的HttpContext中,您可以在其中访问它并创建类型实例。

EF依赖性问题

实体框架需要能够在上下文范围之外创建DbContexts,以使用它们提供的命令行工具创建和执行数据库迁移。

因此,添加构造函数依赖项会导致在使用Entity框架命令行工具时抛出异常!