在控制台应用程序中的OnConfiguring方法中使用依赖注入获取连接字符串?

时间:2017-10-29 14:17:15

标签: c# entity-framework dependency-injection connection-string

在.NET Core Console应用程序中,我有以下DbContext:

public class AppDataContext : DbContext 
{

    public DbSet<ExampleObject> ExampleObjects { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql(/* Read Connection String from appsettings.json */);
    }

}

当然,我可以实例化ConfigurationBuilder类并访问connectionString,如下所示:

var builder = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  .AddJsonFile("appsettings.json");
Configuration = builder.Build();

var connString = Configuration.GetConnectionString("data"));

但是如何强制Entity Framework使用通过依赖注入定义的IConfigurationRoot实例?

谢谢

1 个答案:

答案 0 :(得分:0)

您从错误的角度接近它。您当前正在尝试“引入”配置。您需要做的是在ServiceCollection级别“应用”配置,以便Net Core Dependency Injection可以自动使用正确的值实例化DbContext。这是如何执行此操作的示例:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options => options.UseSqlite("Data Source=blog.db"));
}

当然,您仍然可以使用IConfigurationBuilder来获取您的连接字符串-将在上面的ConfigureServices部分中使用,并且“ Data Source = blog.db”将被交换为您的值

您的DbContext可以这样简化:

public class AppDataContext : DbContext 
{
    public DbSet<ExampleObject> ExampleObjects { get; set; }
}