在ASP.NETCore類庫(kù)項(xiàng)目中讀取配置文件的方法-創(chuàng)新互聯(lián)

小編給大家分享一下在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)十載來致力于為客戶提供做網(wǎng)站、成都網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了上千網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。

.NET Core類庫(kù)項(xiàng)目讀取JSON配置文件

在應(yīng)用程序目錄下添加JSON文件是進(jìn)行如下配置:

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();

然后讀取配置文件的節(jié)點(diǎn),如下:

public void ConfigureServices(IServiceCollection services)
  {

   services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
   ......
   }

但是如果項(xiàng)目是在類庫(kù)中呢,當(dāng)然我們也可以將配置值放在應(yīng)用程序下的appsettings.json中,但是為了不讓其json文件中看起來顯得非常臃腫同時(shí)在類庫(kù)中的配置數(shù)據(jù)我們理應(yīng)放在類庫(kù)中來統(tǒng)一管理,所以我們得另外再想方案,總不能在類庫(kù)中建立startup.cs類,再來實(shí)例化Configuration吧,這樣想想應(yīng)該也是可以,我沒嘗試過,難道就沒有很簡(jiǎn)單的方式么,難道就不能像.net core之前用類來讀取web.config我們只需要給出鍵而得到值嗎?或者說通過強(qiáng)類型配置來統(tǒng)一管理配置數(shù)據(jù),這個(gè)才應(yīng)該是我們嘗試的方向。好了,說了這么多,我們就開干。我們首先來復(fù)習(xí)下.net core中是如何獲取應(yīng)用程序路徑的。

.NET Core獲取應(yīng)用程序路徑

在.NET 4.X之前獲取當(dāng)前應(yīng)用程序根目錄路徑和名稱可以通過如下獲取

var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;

當(dāng)然也可以通過如下來獲取應(yīng)用程序根目錄而不是得到bin目錄

Directory.GetCurrentDirectory()

在.net core中獲取bin目錄路徑通過如下來獲取更加簡(jiǎn)潔。

AppContext.BaseDirectory

在.NET 4.X之前獲取應(yīng)用程序集名稱通過如下來獲?。?/p>

Assembly.GetEntryAssembly().GetName().Name;

在.net core中通過如下來獲取:

var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;

版本通過如下來獲?。?net core也一樣):

Assembly.GetEntryAssembly().GetName().Version.ToString()

在類庫(kù)項(xiàng)目中我們利用強(qiáng)類型配置來實(shí)現(xiàn)讀取配文件數(shù)據(jù),我們首先需要下載如下擴(kuò)展。

在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法

在ConfigurationBuilder類中如下一個(gè)Add添加方法:

//
  // 摘要:
  //  Adds a new configuration source.
  //
  // 參數(shù):
  // source:
  //  The configuration source to add.
  //
  // 返回結(jié)果:
  //  The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
  public IConfigurationBuilder Add(IConfigurationSource source);

對(duì)于AddJsonFile擴(kuò)展方法來添加JSON文件名,文件路徑已經(jīng)通過SetBasePath()方法來實(shí)現(xiàn),一切配置都是基于IConfigurationBuilder接口,其中就有一個(gè)JsonConfigurationSource類,實(shí)現(xiàn)如下:

//
 // 摘要:
 //  Represents a JSON file as an Microsoft.Extensions.Configuration.IConfigurationSource.
 public class JsonConfigurationSource : FileConfigurationSource
 {
  public JsonConfigurationSource();

  //
  // 摘要:
  //  Builds the Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  //  for this source.
  //
  // 參數(shù):
  // builder:
  //  The Microsoft.Extensions.Configuration.IConfigurationBuilder.
  //
  // 返回結(jié)果:
  //  A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  public override IConfigurationProvider Build(IConfigurationBuilder builder);
 }

我們?cè)倏雌涓割惥陀幸粋€(gè)添加JSON文件路徑的方法,如下:

在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法

所以我們從這里可以看出添加JSON文件的方法除了通過擴(kuò)展方法來實(shí)現(xiàn)外還有直接實(shí)例化JsonConfigurationSource來實(shí)現(xiàn),如下:

IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .AddJsonFile("appsettings.json", false, true)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();

上述添加JSON文件皆可,我發(fā)現(xiàn)添加JSON文件必須設(shè)置JSON文件所在的目錄即必須首先要設(shè)置SetBasePath方法,否則會(huì)報(bào)如下錯(cuò)誤:

在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法

我們搞個(gè)測(cè)試JSON文件放在當(dāng)前項(xiàng)目(StudyEFCore.Data)中如下:

在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法

最終讀取類庫(kù)項(xiàng)目JSON配置文件,將其封裝起來就成了如下這個(gè)樣子:

public class JsonConfigurationHelper
 {
  public T GetAppSettings<T>(string key) where T : class, new()
  {
   var baseDir = AppContext.BaseDirectory;
   var indexSrc = baseDir.IndexOf("src");
   var subToSrc = baseDir.Substring(0, indexSrc);
   var currentClassDir = subToSrc + "src" + Path.DirectorySeparatorChar + "StutdyEFCore.Data";

   IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();
   var appconfig = new ServiceCollection()
    .AddOptions()
    .Configure<T>(config.GetSection(key))
    .BuildServiceProvider()
    .GetService<IOptions<T>>()
    .Value;
   return appconfig;
  }
 }

由上有一個(gè)還未解決的問題就是如何得到當(dāng)前類庫(kù)項(xiàng)目的路徑,沒有想到一個(gè)好的法子,不知看到此文的你有何高見。簡(jiǎn)短的調(diào)用則是如下:

 var config = new JsonConfigurationHelper();
   var person = config.GetAppSettings<Person>("JeffckySettings");
   var name = person.Name;
   var age = person.Age;

結(jié)果如下:

在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法

我們將其類修改為ConfigurationManager,然后將其GetAppSettings方法定義為靜態(tài)方法,最后如下調(diào)用是不是滿足了在.net core之前讀取web.config中配置數(shù)據(jù)的問題。哈哈哈:

var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");

以上是“在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前文章:在ASP.NETCore類庫(kù)項(xiàng)目中讀取配置文件的方法-創(chuàng)新互聯(lián)
文章地址:http://bm7419.com/article38/gdcsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、域名注冊(cè)微信小程序、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)