Получение настроек приложений с IOptions <T>в ASP.NET Core 3.0 - PullRequest
0 голосов
/ 29 октября 2019

Используя ASP.NET Core 3.0, я не могу получить значения моих appsettings.json.

настроек приложений. [Среда.] Json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "MySettings": {
    "Option1": "value1",
    "Option2": "value2",
[...]
    }
}

model.cs:

    public class AllSettings
    {
        public MySettings MySettings { get; }

        public static AllSettings Instance = new AllSettings();

        public AllSettings()
        {
            Instance = this;
        }
    }

    public class MySettings
    {
        public string Option1 { get; set; }
        public string Option2 { get; set; }
[...]
    }

Startup.cs:

        public IConfiguration Configuration { get; private set; }

        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

            Configuration = builder;
        }

        public void ConfigureServices(IServiceCollection services)
        {
[...]
            services.AddOptions();
            services.Configure<AllSettings>(Configuration);
        }

А вот в моей функции, где сбой использования с нулевым значением.

        public string Testing()
        {
            var settings = AllSettings.Instance;
            var option1 = settings.MySettings.Option1; //null
            return option1;
        }

Что яотсутствует, здесь?

Пример I, основанный на этом:

https://www.red -gate.com / simple-talk / dotnet / net-development / asp-net-core-3-0-конфигурация-фэкчит /

1 Ответ

0 голосов
/ 29 октября 2019

Является ли appsettings.[environment.]json реальным именем файла в вашем проекте? Это должно быть appsettings.Development.json или appsettings.Release.json.

Далее, нет свойства set для MySettings.

Другая сторона - не используйте статические экземпляры. Это побеждает всю цель DI. Вместо этого введите IOptions<AllSettings> везде, где необходимо.

Startup.cs

        public IConfiguration Configuration { get; private set; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
[...]
            services.Configure<AllSettings>(Configuration);
        }

TestController.cs

[...]
  TestController(IOptions<AllSettings> settings){
    _settings = settings.Value;
  }

  [HttpGet(nameof(TestAction))]
  public MySettings TestAction() {
    return _settings.MySettings;
  }
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...