僅用於測試,我不想從StartUp.cs文件執行依賴項注入。 如何從EF Core DBContext獲取IHostingEnvironment。如何從ASP.NET Core中的DbContext獲取IHostingEnvironment
我帶一個新的空模板的asp.net核心項目。我已經創建瞭如下的dbcontext。我想要使用Environment.ContentRootPath而不是Directory.GetCurrentDirectory()。但我不想從Startup.cs中進行任何注入。
public class MyDBContext: DbContext
{
public IConfigurationRoot Configuration { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "..\\..\\.."))
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
optionsBuilder.UseSqlServer(Configuration.GetConnectionString("SQLCN"));// @"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Lesson> Lessons { get; set; }
}
如果我在下面的DbContext構造函數添加IHostingEnvironment,
public class MyDBContext: DbContext
{
private readonly IHostingEnvironment env;
public MyDBContext(IHostingEnvironment env) : base()
{
this.env = env;
}
public IConfigurationRoot Configuration { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(this.env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
optionsBuilder.UseSqlServer(Configuration.GetConnectionString("SQLCN"));// @"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Lesson> Lessons { get; set; }
}
我得到了以下錯誤,當我加入遷移從包管理器控制檯。
PM> Add-Migration InitMyDBContext
無參數的構造函數是在 'MyDBContext' 找到。在'MyDBContext'中添加一個 無參數構造函數,或在 'MyDBContext'相同的程序集中添加一個實現 'IDbContextFactory'。
提供問題和預期行爲的[mcve],以便可以導出解決方案。 – Nkosi
親愛的@Nkosi,我更新了我的問題。先謝謝了。這個問題不是生產問題,只是爲了學習。 –
我還不清楚您的意思是不想從啓動時進行任何注入?請澄清一下。實際上,您可以直接將IHostingEnvironment注入到dbcontext的構造函數中。 – Nkosi