gpt4 book ai didi

c# - mvc core 2.0,如何通过配置使用 appSettings.json 文件

转载 作者:行者123 更新时间:2023-12-04 22:56:02 25 4
gpt4 key购买 nike

今天我正在尝试新的 asp.net core 2.0,但在使用我没有注入(inject) IConfiguration 配置构造函数属性的 JSON 配置文件时遇到了一些麻烦。

在 asp.net core 1.1 中,我将在 StartUp 中使用以下代码:

public static IConfigurationRoot Configuration;

Public Startup(IHostingEnvironment env) {
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appSettings.json", optional: false, reloadOnChange: true)

Configuration = builder.Build();
}

并可以从以下代码中访问它:
private string _mailTo = Startup.Configuration["mailSettings:mailToAddress"];

但是在 Core 2.0 中,它们更改为 IConfiguration 并且它已经定义,而且我看不到任何可以在其他类中使用配置的方法,所以我对如何继续一无所知。

启动类:
    using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Mvc.Formatters;
using NLog.Web;
using NLog.Extensions.Logging;
using cityInfoTestApi.Services;

namespace cityInfoTestApi
{
public class Startup
{

public IConfiguration Configuration { get; private set; }

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
env.ConfigureNLog("nlog.config");
}

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddMvcOptions(o => o.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()));




public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddNLog();
app.AddNLogWeb();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseStatusCodePages();
app.UseMvc();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});


}
}
}

我的 json 文件:
{
"mailSetings": {
"mailToAddress": "admin@mycompany.com",
"mailFromAddress": "noreply@mycompany.com"
}
}

我想要使​​用设置的自定义类(请注意,这是我使用核心 1.1 的方式:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace cityInfoTestApi.Services
{
public class LocalMailService : IMailService
{

private string _mailTo = Startup.Configuration["mailSettings:mailToAddress"];
private string _mailFrom = Startup.Configuration["mailSettings:mailFromAddress"];


public void Send(string subject, string message)
{
Debug.WriteLine($"Mail from {_mailFrom} to {_mailTo}, with LocalMailService");
Debug.WriteLine($"Subject: {subject}");
Debug.WriteLine($"Message: {message}");
}
}
}

任何帮助将不胜感激,干杯!

最佳答案

是的,ASP.NET Core 2.0 改变了配置构建的方式。您需要使用 IWebHostBuilder.ConfigureAppConfiguration现在方法。

将这样的内容添加到您的 IWebHost在 Program.cs 中创建:

.ConfigureAppConfiguration((builderContext, config) =>
{
IHostingEnvironment env = builderContext.HostingEnvironment;

config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
})

然后 IConfiguration实例可能会被注入(inject)到您的 Startup类通过构造函数作为依赖项(或任何其他类,感谢 DI 机制):
public class Startup
{
public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
...
}

有一篇很好的文章描述了这些变化: ASP.NET Core 2.0 Configuration Changes

关于从自定义类(如 LocalMailService )访问设置的方式 - 避免使用任何静态依赖项。 ASP.NET Core 中使用的这种破坏的 DI 概念。阅读有关使用 IOptions 的信息取而代之的是功能。或者您可以再次使用 DI 并获得 IConfiguration通过 LocalMailService 中的 ctor 实例.

关于c# - mvc core 2.0,如何通过配置使用 appSettings.json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46632090/

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