Как просто прочитать из appsettings.json - PullRequest
0 голосов
/ 28 июня 2018

У меня appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "ConnectionString": "Server=...;Database=...;Trusted_Connection=True;"

}

и База данных класс

public class Database : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Material>().ToTable("vw_Material", schema: "query");
        }

        public virtual DbSet<Material> Material { get; set; }
    }

У меня вопрос, как заменить эту строку

optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");

со значением из appsettings?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать DI для этой цели. Для этого вам нужно зарегистрировать конфигурацию в Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.AddSingleton<IConfiguration>(Configuration);
}

Затем вы можете добавить его в конструктор базы данных:

private readonly IConfiguration configuration;

public Database(IConfiguration config) 
{
    configuration = config;
}

и доступ к нему при настройке:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlServer(configuration.GetConnectionString("ConnectionString"));

Другим вариантом является использование шаблона параметров. В этом случае вам нужно создать класс с нужным вам свойством:

public class ConnectionStringConfig
{
    public string ConnectionString { get; set; }
}

Зарегистрируйте его при запуске:

public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.Configure<ConnectionStringConfig>(Configuration);
}

Внедрить в конструктор базы данных:

private readonly ConnectionStringConfig configuration;

public Database(IOptions<ConnectionStringConfig> config) 
{
    configuration = config.Value;
}

и доступ к нему при настройке:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseSqlServer(configuration.ConnectionString);
...