MVC Core 2.0,如何通过配置使用appSettings.json文件 [英] mvc core 2.0, how to use an appSettings.json file via configuration

查看:98
本文介绍了MVC Core 2.0,如何通过配置使用appSettings.json文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Today I was trying out the new asp.net core 2.0 but ran into some trouble using a JSON configuration file that I wasnt to inject in IConfiguration configuration constructor property.

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

In asp.net core 1.1 I would use this following code in 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();
}

并可以通过以下代码访问它:

and could access it from the code like:

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

但是,在Core 2.0中,它们已更改为IConfiguration,并且已经定义好了,我看不到可以在其他类中使用该配置的任何方式,因此我对如何进行操作一无所知.

However In Core 2.0 they changed to IConfiguration and it's already defined moreover I don't see any way i can use the configuration in my other classes, so I'm kinda clueless on how to proceed.

startupClass:

The startupClass:

    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的方式:

my custom class wanting to use the settings (note it was how i would use core 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}");
        }
    }
}

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

any help would be much appreciated, Cheers!

推荐答案

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

Yes, ASP.NET Core 2.0 has changed the way for configuration building. You need to use IWebHostBuilder.ConfigureAppConfiguration method now.

在Program.cs中的IWebHost创建中添加类似的内容:

Add something like this to your IWebHost creation in 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实例作为依赖项(或其他任何类,这要归功于DI机制)注入到您的Startup类中:

Then IConfiguration instance may be injected to your Startup class via constructor as a dependency (or any other class, thanks to DI mechanism):

public class Startup
{
    public IConfiguration Configuration { get; }

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

有一篇很好的文章描述了这些更改: ASP.NET Core 2.0配置更改

There is a good article that describes those changes: ASP.NET Core 2.0 Configuration Changes

关于从自定义类(如LocalMailService)访问设置的方法-避免使用任何静态依赖项.在ASP.NET Core中使用了这种破碎的DI概念.了解有关使用 IOptions 功能.或者,您可以再次使用DI并通过LocalMailService中的ctor获取IConfiguration实例.

Regarding your way to get access to settings from custom classes (like LocalMailService) - avoid using any static dependencies. This broken DI conception used in ASP.NET Core. Read about using IOptions feature instead. Or you may again use DI and get IConfiguration instance via ctor in LocalMailService.

这篇关于MVC Core 2.0,如何通过配置使用appSettings.json文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆