访问ASP.NET Core中的配置选项:选项模式

Ser*_*rge 2 c# configuration .net-core asp.net-core

我有一个ASP.NET核心应用程序.我尝试使用选项模式,但它似乎不起作用.

我有以下内容appsettings.json:

{
    "ConnectionStrings": {
        "MyTablesConnectionString": "Default[...];EndpointSuffix=core.windows.net"
    },

    "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" }  }
}
Run Code Online (Sandbox Code Playgroud)

以下ConnectionStrings课程

public class ConnectionStrings {
    public ConnectionStrings()  {
        MyTablesConnectionString = "default value";
    }

    public string MyTablesConnectionString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Startup.cs

public Startup(IHostingEnvironment 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();
    Configuration = builder.Build();

    // HERE IS THE GOOD VALUE !!!!!!!!
    Debug.WriteLine($"Connection string is:{Configuration["ConnectionStrings:MyTablesConnectionString"]}");
}

public void ConfigureServices(IServiceCollection services)
{
    // Adds services required for using options.
    services.AddOptions();
    // Register the IConfiguration instance which "ConnectionStrings" binds against.
    services.Configure<ConnectionStrings>(Configuration);

    // Add framework services.
    services.AddMvc();            
}
Run Code Online (Sandbox Code Playgroud)

但是,在使用以下控制器的开发机器上使用它时

private readonly ConnectionStrings azureConnectionString;
public HelloWorldController(IOptions<ConnectionStrings> optionsAccessor)
{
    // HERE IS THE "DEFAULT" VALUE ?!!!!!!!!
    azureConnectionString = optionsAccessor.Value;            
}
Run Code Online (Sandbox Code Playgroud)

我看到使用"默认值"而不是json文件中的值(无效值).我错过了什么吗?

juu*_*nas 5

您需要绑定ConnectionStrings部分,如下所示:

services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
Run Code Online (Sandbox Code Playgroud)

目前,它希望从您的类中找到属性"ConnectionStrings"或"Logging",因为您绑定了根.

  • 我实际上在不同的选项上写了一篇博客文章:https://joonasw.net/view/asp-net-core-1-configuration-deep-dive.查看用户机密.它允许您将密码等内容保留在源代码管理之外. (2认同)