ASP.Net Core 2 中的全局变量

Global Variables in ASP.Net Core 2

我正在 ASP.NET Core 中开发 Web 应用程序,目前有大量密钥,例如条带帐户密钥。我不想将它们分散在整个项目中的不同 类 中,而是想将它们放在一起 json 中,以便可以全局访问它们。我试过将它们放在 appsettings.json 但无法在任何地方访问它们。

我经常用连接字符串和其他全局常量做这种事情。首先为您需要的那些变量创建一个 class 。在我的项目中它是 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;
    }
    ....
}

在我的例子中,我唯一想要的 属性 是字符串,但我可以使用整个选项 class。

在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;
}