欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在ASP.NET Core類(lèi)庫(kù)項(xiàng)目中讀取配置文件詳解

 更新時(shí)間:2017年10月13日 09:05:21   作者:Jeffcky  
這篇文章主要給大家介紹了關(guān)于如何在ASP.NET Core類(lèi)庫(kù)項(xiàng)目中讀取配置文件的相關(guān)資料,這是朋友提的一個(gè)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳解,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。

前言

最近有朋友問(wèn)如何在.net core類(lèi)庫(kù)中讀取配置文件,當(dāng)時(shí)一下蒙了,這個(gè)提的多好,我居然不知道,于是這兩天了解了相關(guān)內(nèi)容才有此篇文章的出現(xiàn),正常來(lái)講我們?cè)趹?yīng)用程序目錄下有個(gè)appsettings.json文件對(duì)于相關(guān)配置都會(huì)放在這個(gè)json文件中,但是要是我建立一個(gè)類(lèi)庫(kù)項(xiàng)目,對(duì)于一些配置比如密鑰或者其他需要硬編碼的數(shù)據(jù)放在JSON文件中,在.net core之前配置文件為web.config并且有相關(guān)的類(lèi)來(lái)讀取節(jié)點(diǎn)上的數(shù)據(jù),現(xiàn)如今在.net core中為json文件,那么我們?cè)撊绾巫??本文就此?yīng)運(yùn)而生。

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

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

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

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

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

Directory.GetCurrentDirectory()

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

AppContext.BaseDirectory

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

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

在.net core中通過(guò)如下來(lái)獲?。?/p>

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

版本通過(guò)如下來(lái)獲?。?net core也一樣):

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

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

在ConfigurationBuilder類(lèi)中如下一個(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ò)展方法來(lái)添加JSON文件名,文件路徑已經(jīng)通過(guò)SetBasePath()方法來(lái)實(shí)現(xiàn),一切配置都是基于IConfigurationBuilder接口,其中就有一個(gè)JsonConfigurationSource類(lèi),實(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è)倏雌涓割?lèi)就有一個(gè)添加JSON文件路徑的方法,如下:

所以我們從這里可以看出添加JSON文件的方法除了通過(guò)擴(kuò)展方法來(lái)實(shí)現(xiàn)外還有直接實(shí)例化JsonConfigurationSource來(lái)實(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ò)誤:

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

最終讀取類(lèi)庫(kù)項(xiàng)目JSON配置文件,將其封裝起來(lái)就成了如下這個(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è)還未解決的問(wèn)題就是如何得到當(dāng)前類(lèi)庫(kù)項(xiàng)目的路徑,沒(méi)有想到一個(gè)好的法子,不知看到此文的你有何高見(jiàn)。簡(jiǎn)短的調(diào)用則是如下:

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

結(jié)果如下:

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

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

總結(jié)

本節(jié)我們?cè)敿?xì)講解了在.net core類(lèi)庫(kù)項(xiàng)目中如何讀取JSON配置中的數(shù)據(jù)但是還是有點(diǎn)不足,你有何高見(jiàn)?

相關(guān)文章

  • ADO.NET基礎(chǔ)知識(shí)匯總

    ADO.NET基礎(chǔ)知識(shí)匯總

    程序和數(shù)據(jù)庫(kù)交互,要通過(guò)ADO.NET進(jìn)行;通過(guò)ADO.NET就能在數(shù)據(jù)庫(kù)中執(zhí)行SQL了 。ADO.NET中提供了對(duì)不同數(shù)據(jù)庫(kù)的統(tǒng)一操作接口(ODBC) 。另外還有一種操作數(shù)據(jù)庫(kù)的接口是JDBC
    2015-11-11
  • .net預(yù)編譯命令詳解(圖)

    .net預(yù)編譯命令詳解(圖)

    Net預(yù)編譯命令使用方法,大家參考使用吧
    2013-12-12
  • VS2010制作第一個(gè)簡(jiǎn)單網(wǎng)站

    VS2010制作第一個(gè)簡(jiǎn)單網(wǎng)站

    這篇文章主要為大家介紹VS2010如何制作第一個(gè)簡(jiǎn)單網(wǎng)站,和大家一起學(xué)習(xí) 動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)技術(shù),感興趣的小伙伴們可以參考一下
    2015-11-11
  • C#反射技術(shù)的簡(jiǎn)單操作(讀取和設(shè)置類(lèi)的屬性)

    C#反射技術(shù)的簡(jiǎn)單操作(讀取和設(shè)置類(lèi)的屬性)

    反射的作用想必大家都知道了吧,少量屬性的自動(dòng)化操作手動(dòng)添加幾下當(dāng)然是沒(méi)有問(wèn)題的,但是屬性數(shù)量較多的時(shí)候敲起這些繁鎖的代碼可以困了,再說(shuō)對(duì)擴(kuò)展和維護(hù)性造成很多的不遍,以下代碼中如不能直接使用請(qǐng)?zhí)砑觰sing System.Text;的引用。
    2011-01-01
  • ASP.NET?MVC5?網(wǎng)站開(kāi)發(fā)框架模型、數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)邏輯(三)

    ASP.NET?MVC5?網(wǎng)站開(kāi)發(fā)框架模型、數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)邏輯(三)

    上次搭建好了項(xiàng)目框架,但還是覺(jué)得不太對(duì)勁,后來(lái)才想起來(lái)沒(méi)有對(duì)開(kāi)發(fā)目標(biāo)進(jìn)行定位,這個(gè)小demo雖然不用做需求分析,但是要實(shí)現(xiàn)什么效果還得明確。后來(lái)想了一下就做個(gè)最簡(jiǎn)單的網(wǎng)站,目標(biāo)定為小公司進(jìn)行展示用的網(wǎng)站。功能有顯示用的文章功能,咨詢留言,評(píng)論等
    2015-09-09
  • Visual Studio ASP.NET Core MVC入門(mén)教程第一篇

    Visual Studio ASP.NET Core MVC入門(mén)教程第一篇

    這篇文章主要為大家詳細(xì)介紹了Visual Studio ASP.NET Core MVC入門(mén)教程的第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • ASP.NET自定義Web服務(wù)器控件之Button控件

    ASP.NET自定義Web服務(wù)器控件之Button控件

    這篇文章主要介紹了ASP.NET自定義Web服務(wù)器控件之Button控件,詳細(xì)講述了Button控件的實(shí)現(xiàn)代碼、前臺(tái)頁(yè)面的調(diào)用以及對(duì)應(yīng)的事件響應(yīng)代碼,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • asp.net core 修改默認(rèn)端口的幾種方法

    asp.net core 修改默認(rèn)端口的幾種方法

    這篇文章主要介紹了asp.net core 修改默認(rèn)端口的幾種方法,文中講解非常詳細(xì),代碼和圖片幫助大家更好的理解,感興趣的朋友可以了解下
    2020-06-06
  • 基于.NET的FluentValidation數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)

    基于.NET的FluentValidation數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)

    這篇文章主要介紹了基于.NET的FluentValidation數(shù)據(jù)驗(yàn)證實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • asp.net中GridView和DataGrid相同列合并實(shí)現(xiàn)代碼

    asp.net中GridView和DataGrid相同列合并實(shí)現(xiàn)代碼

    asp.net中GridView和DataGrid相同列合并實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2012-10-10

最新評(píng)論