Параметры конфигурации <T>нулевое значение - PullRequest
2 голосов
/ 03 ноября 2019

У меня проблема, я регистрирую ConfigValidator как Singleton и другие классы для проверки appsettings.json на действительность, но я получаю нулевые значения в ConfigValidator. Проверка конфигурации и заполненные значения, отладка попадет в класс ConfigValidator, но записывает значение null

Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {

        var builder = new ConfigurationBuilder()
            .AddJsonFile(ConfigPath + Path.DirectorySeparatorChar + ConfigFile, optional: false, reloadOnChange: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build();

        services.AddOptions();
        services.AddSingleton<ConfigValidator>();
        services.Configure<NginxStorageConfig>(Configuration);
        services.Configure<FormManagerConfig>(Configuration);
        services.Configure<SslCertConfig>(Configuration);
        services.Configure<WebApiConfig>(Configuration);
    }



public void Configure(IApplicationBuilder app, ConfigValidator validator)
    {
        app.UseAuthentication();
        app.UseHsts();
        app.UseMiddleware(typeof(ErrorHandlingMiddleware));
        app.UseMvc();
        validator.ValidateConfig(); //call validator 
    }

ConfigValidator:

public class ConfigValidator
{
    private readonly IOptions<FormManagerConfig> _formManager;
    private readonly IOptions<NginxStorageConfig> _ngixStorage;
    private readonly IOptions<SslCertConfig> _certConfig;
    private readonly IOptions<WebApiConfig> _webApi;

    public ConfigValidator(IOptions<FormManagerConfig> formManager,
        IOptions<NginxStorageConfig> ngixStorage,
        IOptions<SslCertConfig> certConfig,
        IOptions<WebApiConfig> webApi)
    {
        _formManager = formManager;
        _ngixStorage = ngixStorage;
        _certConfig = certConfig;
        _webApi = webApi;
    }

    public void ValidateConfig()
    {
        var portValue = _webApi.Value.Port;

        string[] str =
        {
            _formManager.Value.FormConfigurationFileName,
            _formManager.Value.PathToFormsStorage,

            _ngixStorage.Value.UploadFilePath,
            _ngixStorage.Value.NginxFileStoreLocation,
            _ngixStorage.Value.NgnixFormsStorageLocation,

            _certConfig.Value.Password,
            _certConfig.Value.Path
        };

        try
        {
            Validate(str);
            if (portValue == 0 && portValue < 0)
            {
                throw new ValidationException($"{nameof(portValue)} incorrect");
            }
            else
            {
                Instance.Logger.Info($"{nameof(portValue)} correct");
            }
        }
        catch (ValidationException e)
        {
            Instance.Logger.Error(e);
        }
    }

    private void Validate(params string[] strings)
    {
        foreach (var value in strings)
        {
            if (value.IsNullOrEmpty())
            {
                throw new ValidationException($"{nameof(value)} incorrect");
            }
            else
            {
                Instance.Logger.Info($"Value {value} correct");
            }
        }
    }
}

image of values

1 Ответ

0 голосов
/ 05 ноября 2019
services.AddSingleton<ConfigValidator>();
services.Configure<NginxStorageConfig>(Configuration.GetSection("nginxStorage"));
services.Configure<FormManagerConfig>(Configuration.GetSection("form_manager"));
services.Configure<SslCertConfig>(Configuration.GetSection("SslCert"));
services.Configure<WebApiConfig>(Configuration.GetSection("webApi"));
...