Как автоматически проверять значения конфигурации из файла appSettings.json во время настройки DI?C#

Место общения программистов C#
Anonymous
Как автоматически проверять значения конфигурации из файла appSettings.json во время настройки DI?

Сообщение Anonymous »

Я добавил конфигурации в файл appSettings.json в своем проекте .NET Core. Для простоты я приведу в качестве примера настройки базы данных. Итак, в файле настроек у вас будет

Код: Выделить всё

{
"Database": {
"Host": "localhost",
"Port": 1234,
"Database": "myDb",
"Username": "username",
"Password": "pw",
"EnablePooling": true
}
}
При настройке служб в файле Startup.cs я хочу сделать эти настройки доступными посредством внедрения зависимостей. Модель данных для этого:

Код: Выделить всё

public class DatabaseSettings
{
public string Host { get; set; }
public ushort Port { get; set; }
public string Database { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool EnablePooling { get; set; }
}
и я настраиваю так

Код: Выделить всё

private void SetupSettings(IServiceCollection services)
{
ServiceProvider serviceProvider = services.BuildServiceProvider();
IConfiguration configuration = serviceProvider.GetService();

IConfigurationSection databaseConfigurationSection = configuration.GetSection("Database");
services.Configure(databaseConfigurationSection);
}
Наконец, я хочу проверить эти настройки. Я знаю, что могу создать класс валидатора, реализующий интерфейс IValidateOptions.

Код: Выделить всё

public class DatabaseSettingsValidator : IValidateOptions
{
private readonly IList failures;

public DatabaseSettingsValidator()
{
failures = new List();
}

public ValidateOptionsResult Validate(string databaseSettingsName, DatabaseSettings databaseSettings)
{
if (databaseSettings == null)
failures.Add($"{databaseSettingsName} are required.");

if (string.IsNullOrEmpty(databaseSettings?.Host))
failures.Add($"{nameof(databaseSettings.Host)} must not be empty.");

if (string.IsNullOrEmpty(databaseSettings?.Database))
failures.Add($"{nameof(databaseSettings.Database)} must not be empty.");

if (failures.Any())
return ValidateOptionsResult.Fail(failures);

return ValidateOptionsResult.Success;
}
}
но нужно ли мне создавать этот класс и вызывать метод Validate самостоятельно? Может быть, есть что-то вроде этого примера кода?
.

Код: Выделить всё

services.ValidateConfiguration();
Итак, вы передаете настроенные параметры и используемый валидатор.

Вернуться в «C#»