C# .NET5.0 讀取appsettings.json


基於VS2019,使用步驟:

方式一:

第一步:appsettings.json 定義配置項,可理解為定義對象屬性,eg:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "MEASSettings": 
  {
    "PrintName": "wula",
    "PrintNum": 12
  },

  "AllowedHosts": "*"

}

第二步:定義實體對象,eg:

using System;

namespace Test
{
    public class MEASSettings
    {
        public string PrintName { get; set; }
        public string PrintNum { get; set; }

    }
} 

 第三步:讀取配置項公共方法提取,創建DLL(基於.NET 5.0略)

注:需安裝如下依賴項,略

 

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using System;

namespace MEAS.Common
{
    public class AppsettingsHelper
    {
        public IConfiguration Configuration { get; set; }

        //定義一個用於保存靜態變量的實例
        private static AppsettingsHelper instance = null;
        //定義一個保證線程同步的標識
        private static readonly object locker = new object();
        //構造函數為私有,使外界不能創建該類的實例
        private AppsettingsHelper()
        {
            Configuration = new ConfigurationBuilder()
                .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
                .Build();
        }
        public static AppsettingsHelper Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (locker)
                    {
                        if (instance == null) instance = new AppsettingsHelper();
                    }
                }
                return instance;
            }
        }

        /// <summary>
        /// 根據索引獲取配置項value值
        /// </summary>
        /// <param name="indexPath"></param>
        /// <returns></returns>
        public string GetConfigByIndex(string indexPath)
        {
            return Configuration[indexPath].ToString();//Configuration["MEASSettings:PrintName"];
        }

        /// <summary>
        /// 根據節點獲取配置文件對象實例
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        public IConfiguration GetConfigObjs(string className)
        {
            //string aa = Configuration.GetSection("MEASSettings").Get<MEASSettings>().PrintName;
            return Configuration.GetSection(className);//    MEASSettings bbbb = see.Get<MEASSettings>();
        }

        /// <summary>
        /// 根據具體對象獲取對象實例
        /// </summary>
        /// <typeparam name="T">對象類型</typeparam>
        /// <param name="obj">實體對象</param>
        /// <returns></returns>
        public object GetConfigObjByEntity<T>(T obj)
        {
            string className = Type.GetType(obj.ToString()).Name;
            return Configuration.GetSection(className).Get(Type.GetType(obj.ToString()));
        }

    }
}

第五步:使用方式如下所示:

            //方式一
            string aa = Configuration.GetSection("MEASSettings").Get<MEASSettings>().PrintName;
            MEASSettings aaa = Configuration.GetSection("MEASSettings").Get<MEASSettings>();
            //方式二
            string bb = ConfigHelper.Instance.GetConfigByIndex("MEASSettings:PrintName");
            //方式三
            IConfiguration cc = ConfigHelper.Instance.GetConfigObjs("MEASSettings");
            MEASSettings ccc = cc.Get<MEASSettings>();
            //方式四
            MEASSettings set = new MEASSettings();
            MEASSettings ddd = ConfigHelper.Instance.GetConfigObjByEntity<MEASSettings>(set) as MEASSettings;
            //方式五
            MEASSettings temp = ConfigHelper.Instance.GetConfigObjByEntity<MEASSettings>(new MEASSettings()) as MEASSettings;     

 方式二:

第一步,根據appsettings.json 文件創建對應的對象模型

注:選擇對應的對象(選擇單個對象時,只選擇對應的中括號)==》下面是選擇所有配置內容后自動生成對象模型

自動生成后需根據實際情況修改對應的實體類名稱--修改名稱略

對象如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "MEASSettings": 
  {
    "PrintName": "wula",
    "PrintNum": 12
  },

  "AllowedHosts": "*"

}

//對應實體如下所示:
using System;

namespace Test
{
    public class AppSettings
    {
        public Logging Logging { get; set; }
        public MEASSettings MEASSettings { get; set; }
        public string AllowedHosts { get; set; }
    }

    public class Logging
    {
        public Loglevel LogLevel { get; set; }
    }

    public class Loglevel
    {
        public string Default { get; set; }
        public string Microsoft { get; set; }
        public string MicrosoftHostingLifetime { get; set; }
    }

    public class MEASSettings
    {
        public string PrintName { get; set; }
        public int PrintNum { get; set; }
    }

}

第二步:根據視圖對象模型,通過IConfiguration獲取整個對象模型的對象

//通過對象模型獲取AppSettings對象集合
var setting = new AppSettings();
Configuration.Bind(setting);
//調用使用AppSettings對象屬性
string printName=setting.MEASSettings.PrintName;

 //部分綁定

var measSettings = new MEASSettings();
Configuration.GetSection("measSettings").Bind(measSettings);

方式三:注冊配置選項服務

  public void ConfigureServices(IServiceCollection services)
        {
            //注冊配置選項服務
            services.Configure<AppSettings>(Configuration);
            //......
       }  

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IOptions<AppSettings> options)
        {
        //使用配置選項服務 string printName = options.Value.MEASSettings.PrintName; if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication1 v1")); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }

 方式四:

//自定義讀取配置文件 + 注冊配置選項服務
//自定義配置,注冊配置選項,讀取時通過options方式讀取
var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
string printName2=config["MEASSettings:PrintName"];
services.Configure<AppSettings>(config);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM