web-dev-qa-db-ja.com

ASP.Net Core 2のグローバル変数

ASP.NET CoreでWebアプリケーションを開発していますが、現在、ストライプアカウントキーなどの大量のキーセットがあります。それらをプロジェクト全体のさまざまなクラスに分散させるのではなく、それらをグローバルにアクセスできるjsonにまとめて配置したいと考えています。 appsettings.jsonに配置しようとしましたが、どこからでもアクセスできません。

11
Luke Davidson

私は接続文字列やその他のグローバル定数を使ってこの種のことをよくします。まず、必要な変数のクラスを作成します。私のプロジェクトではそれは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;
    }
    ....
}

私の場合、必要なプロパティは文字列だけでしたが、オプションクラス全体を使用することもできました。

12
nurdyguy

Appsettings.jsonに変数を保持します。

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

AppSettingsクラスを作成します。

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;
}
9
prisar