C# ASP.NET核心选项模式

C# ASP.NET核心选项模式,c#,asp.net-core,C#,Asp.net Core,我试图使用所描述的选项模式,但我希望能够得到比键/值对更复杂的东西 理想情况下,我希望能够使用将json粘贴为类,复制我的appsettings.json,然后将根类交给服务。配置(Configuration)并完成它 以下是我所做的: appsettings.json: { "Data": { "ConnectionA": { "ConnectionString": "string1" }, "ConnectionB": { "Connect

我试图使用所描述的选项模式,但我希望能够得到比键/值对更复杂的东西

理想情况下,我希望能够使用
将json粘贴为类
,复制我的appsettings.json,然后将根类交给
服务。配置(Configuration)
并完成它

以下是我所做的:

appsettings.json:

{
  "Data": {
    "ConnectionA": {
      "ConnectionString": "string1"
    },
    "ConnectionB": {
      "ConnectionString": "string2"
    }
  }
}
    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)
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOptions();
        services.Configure<Data>(Configuration);

        // Add framework services.
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=User}/{action=Index}/{id?}");
        });
    }
相应的类别

public class Data
{
    public Connectiona ConnectionA { get; set; }
    public Connectionb ConnectionB { get; set; }
}

public class Connectiona
{
    public string ConnectionString { get; set; }
}

public class Connectionb
{
    public string ConnectionString { get; set; }
}
services.Configure<Data>(Configuration);
startup.cs

public class Data
{
    public Connectiona ConnectionA { get; set; }
    public Connectionb ConnectionB { get; set; }
}

public class Connectiona
{
    public string ConnectionString { get; set; }
}

public class Connectionb
{
    public string ConnectionString { get; set; }
}
services.Configure<Data>(Configuration);
编辑

这项工作:

services.Configure<Data>(options => {
    options.Connectiona = new Connectiona();
    options.Connectiona = new Connectionb();
    options.Connectiona.ConnectionString = Configuration["Data:Connectiona:ConnectionString"];
    options.Connectionb.ConnectionString = Configuration["Data:Connectionb:ConnectionString"];
});
services.Configure(选项=>{
options.Connectiona=newconnectiona();
options.Connectiona=newconnectionb();
options.Connectiona.ConnectionString=配置[“数据:Connectiona:ConnectionString”];
options.Connectionb.ConnectionString=配置[“数据:Connectionb:ConnectionString”];
});
所以看起来我就是不能使用
服务。配置(配置)
扩展。

这样试试:

{
  "Data": {
    "DataWarehouseConnection": {
      "ConnectionString": "yourconnectionstringhere"
    },
    "DefaultConnection ": {
      "ConnectionString": "yourconnectionstringhere"
    }
}

尝试
services.Configure(Configuration.GetSection(“数据”)而不是
服务。配置(配置)

这就是我所拥有的。。。我只是没有从该文件中复制名称(因为它有敏感信息),而是从类文件中复制。我将更新示例。您的Json格式不正确。这只是问题中的一个输入错误吗?对不起,这里只是一个输入错误。您是否包括了
services.AddOptions()设置过程中的第一步显示完全启动。您可能没有添加appsettings.jsonfile@Charles尝试
services.Configure(Configuration.GetSection(“数据”)