Глобальные переменные в ASP.Net Core 2 - PullRequest
0 голосов
/ 04 октября 2018

Я занимаюсь разработкой веб-приложения в ASP.NET Core, и в настоящее время у меня есть большой набор ключей, например ключи учетной записи в виде чередования.Вместо того, чтобы распространять их по всему проекту в разных классах, я бы хотел поместить их все вместе в json, где они будут доступны по всему миру.Я попытался поместить их в appsettings.json, но нигде не могу получить к ним доступ.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

В appsettings.json храните переменные.

{
    "foo": "value1",
    "bar": "value2",
}

Создать AppSettings class.

public class AppSettings
{
    public string foo { get; set; }

    public string bar { get; set; }
}

В Startup.cs файлрегистр.

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSettings>(Configuration);
}

Использование,

public class MyController : Controller
{
    private readonly IOptions<AppSettings> _appSettings;

    public MyController(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings;
    }
    var fooValue = _appSettings.Value.foo;
    var barValue = _appSettings.Value.bar;
}
0 голосов
/ 04 октября 2018

Я часто так поступаю со строками подключения и другими глобальными константами.Сначала создайте класс для тех переменных, которые вам нужны.В моем проекте это MDUOptions, но все, что вы хотите.

public class MDUOptions
{
    public string mduConnectionString { get; set; }
    public string secondaryConnectionString { get; set; }
}

Теперь в вашем Startup.cs методе ConfigureServices:

Action<MDU.MDUOptions> mduOptions = (opt =>
{
    opt.mduConnectionString = Configuration["ConnectionStrings:mduConnection"];
});
services.Configure(mduOptions);
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<MDUOptions>>().Value);

Теперь вы используете DI для доступа к нему в коде:

public class PropertySalesRepository : IPropertySalesRepository
{
    private static string _mduDb;

    public PropertySalesRepository(MDUOptions options)
    {
        _mduDb = options.mduConnectionString;
    }
    ....
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...