gpt4 book ai didi

c# - ASP.NET Core 选项模式

转载 作者:行者123 更新时间:2023-11-30 19:37:29 24 4
gpt4 key购买 nike

我正在尝试使用 here 中描述的选项模式,但我希望能够得到比键/值对更复杂的东西。

理想情况下,我希望能够使用 Paste JSON as Classes 复制我的 appsettings.json , 然后将根类交给 services.Configure<T>(Configuration)并完成它。

这是我所做的:

appsettings.json:

{
"Data": {
"ConnectionA": {
"ConnectionString": "string1"
},
"ConnectionB": {
"ConnectionString": "string2"
}
}
}

对应类

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

startup.cs

services.Configure<Data>(Configuration);

这将返回 ConnectionA 的空对象和 ConnectionB虽然。

有什么建议吗?

每个请求的完整 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)
.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?}");
});
}

编辑:

这个有效:

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<Data>(Configuration)扩展名。

最佳答案

尝试 services.Configure<Data>(Configuration.GetSection("Data"));而不是 services.Configure<Data>(Configuration);

关于c# - ASP.NET Core 选项模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37995007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com