【发布时间】:2018-08-27 07:23:45
【问题描述】:
我刚刚开始研究带有实体框架的 .NET Core。我以前使用过 .NET Framework 和 Ninject,但我现在尝试使用 .NET Core 中内置的 DI。
我有一个 TestBase 类,我的测试将从中派生。我希望这个类负责使用[OneTimeSetUp] 和[OneTimeTearDown] 创建和删除测试数据库。问题是我似乎无法弄清楚如何在设置和拆卸方法中访问我的 DI 服务。这些方法不能有参数,我的TestBase 类必须有一个无参数的构造函数,所以我也不能从那里得到它们。
[SetUpFixture]
public partial class TestBase
{
protected IEFDatabaseContext DataContext { get; set; }
public TestBase(IEFDatabaseContext dataContext)
{
this.DataContext = dataContext;
}
[OneTimeSetUp]
public void TestInitialise()
{
this.DataContext.Database.EnsureCreated();
}
[OneTimeTearDown]
public void TestTearDown()
{
this.DataContext.Database.EnsureDeleted();
}
}
上面给出了以下错误:
TestBase没有默认构造函数。
我可能会以错误的方式解决这个问题,但这是我过去一直做的事情,所以请告诉我在使用 .NET Core DI 时是否有更好的方法。
Startup类供参考:
public class Startup
{
private readonly IConfiguration config;
public Startup(IConfiguration config)
{
this.config = config;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TestDataContext>(
options => options.UseSqlServer(this.config.GetConnectionString("TestConnectionString")),
ServiceLifetime.Singleton);
services.AddScoped<IEFDatabaseContext>(provider => provider.GetService<TestDataContext>());
}
}
【问题讨论】:
-
感谢@NightOwl888,您帮我找到了我刚刚发布的解决方案。
标签: c# entity-framework asp.net-core dependency-injection integration-testing