Вам необходимо использовать Microsoft.Extensions.Options.ConfigurationExtensions
для хранения значений конфигурации. И самое главное в ядре dotnet - каждая функциональность разделена на разные библиотеки, что дает возможность добавлять только то, что требуется.
Сначала создайте класс параметров подключения для хранения значений
public class ConnectionSettings
{
public string DefaultConnectionString { get; set; }
}
И добавить конфигурацию в конфигурационный файл как
{
"connectionSettings": {
"defaultConnectionString": "Here goes your connection setting"
}
}
Теперь зарегистрируйте этот класс настроек в универсальном компоновщике хоста как
IHostBuilder builder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, configurationBuilder) =>
{
// Assuming config file is configsettings.json
configurationBuilder.AddJsonFile("configsettings.json", optional: false, reloadOnChange: false);
// Using Environment variables as well to override any settings provided
configurationBuilder.AddEnvironmentVariables();
// Command line args will be highest prioirty
configurationBuilder.AddCommandLine(args);
})
.ConfigureServices((hostContext, services) =>
{
IConfigurationSection config = hostContext.Configuration.GetSection("connectionSettings");
// Adding class to be part of Options
services.Configure<ConnectionSettings>(config);
});
Теперь переходим к DbContext
public class MyDbContext : DbContext
{
private IOptions<ConnectionSettings> connectionSettingsOptions;
public MyDbContext(IOptions<ConnectionSettings> connectionSettingsOptions)
{
this.connectionSettingsOptions = connectionSettingsOptions;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(this.connectionSettingsOptions.Value.DefaultConnectionString);
}
}
Теперь эта строка подключения может быть переопределена в соответствии с приоритетом ниже 1, который является самым низким, а 3 - самым высоким, потому что я добавил их только в этом порядке при настройке универсального компоновщика хоста
- Значение из конфигурационного файла
- Значение из переменных среды
- Значение из аргументов командной строки, передаваемых как --connectionSettings: defaultConnectionString "myconnectionstring"
Используются пакеты Nuget
- Microsoft.EntityFrameworkCore (2.2.4)
- Microsoft.Extensions.Configuration.CommandLine (2.2.0)
- Microsoft.Extensions.Configuration.EnvironmentVariables (2.2.4)
- Microsoft.Extensions.Configuration.Json (2.2.0)
- Microsoft.Extensions.Hosting (2.2.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (2.2.0)
Надеюсь, это поможет !!