Получить значение из файла appsettings.json в общем классе - PullRequest
0 голосов
/ 08 мая 2019

Я хочу получить значение с помощью Appsettings из файла appsettings.json

Мой код находится в файле appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AppSettings": {
    "APIURL": "https://localhost:44303/api"
  },
  "AllowedHosts": "*"
}

Но я не знаю, как получить это значение в файле общего класса.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Создайте класс, соответствующий структуре вашего JSON, и поместите его в «обычное» место:

public class AppSettings
{
    public Uri APIURL { get; set; }
}

Создайте где-нибудь экземпляр AppSettings (мне нравится создавать его вConfigureServices и затем зарегистрируйте его в контейнере).Например,

// create a new instance
var appsettings = new AppSettings();
// get section from the config served up by the various .NET Core configuration providers (including file JSON provider)
var section = Configuration.GetSection("AppSettings");
// bind (i.e. hydrate) the config to this instance
section.Bind(appsettings);
// make this object available to other services
services.AddSingleton(appsettings);

Затем, когда вам нужно использовать appsettings, вы можете сделать это, просто внедрив его в любые службы, которые в этом нуждаются.Например

public class SomeService
{
    private readonly AppSettings _settings;

    public SomeService(AppSettings settings) => _settings = settings;

    ...
}
1 голос
/ 08 мая 2019

В общем, вы хотите использовать строго типизированную конфигурацию.По сути, вы просто создаете класс, такой как:

public class AppSettings
{
    public Uri ApiUrl { get; set; }
}

И затем, в ConfigureServices:

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

Затем, где вам нужно это использовать, вы вводите IOptions<AppSettings>:

public class Foo
{
    private readonly IOptions<AppSetings> _settings;

    public Foo(IOptions<AppSettings> settings)
    {
        _settings = settings;
    }

    public void Bar()
    {
        var apiUrl = _settings.Value.ApiUrl;
        // do something;
    }
}
...