一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 如何在ASP.NET Core類庫項目中讀取配置文件詳解

如何在ASP.NET Core類庫項目中讀取配置文件詳解

2020-05-16 17:17Jeffcky ASP.NET教程

這篇文章主要給大家介紹了關于如何在ASP.NET Core類庫項目中讀取配置文件的相關資料,這是朋友提的一個問題,文中通過示例代碼介紹的非常詳解,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一

前言

最近有朋友問如何在.net core類庫中讀取配置文件,當時一下蒙了,這個提的多好,我居然不知道,于是這兩天了解了相關內容才有此篇文章的出現,正常來講我們在應用程序目錄下有個appsettings.json文件對于相關配置都會放在這個json文件中,但是要是我建立一個類庫項目,對于一些配置比如密鑰或者其他需要硬編碼的數據放在JSON文件中,在.net core之前配置文件為web.config并且有相關的類來讀取節點上的數據,現如今在.net core中為json文件,那么我們該如何做?本文就此應運而生。

.NET Core類庫項目讀取JSON配置文件

在應用程序目錄下添加JSON文件是進行如下配置:

?
1
2
3
4
5
6
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();

然后讀取配置文件的節點,如下:

?
1
2
3
4
5
6
public void ConfigureServices(IServiceCollection services)
  {
 
   services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
   ......
   }

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

.NET Core獲取應用程序路徑

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

?
1
2
var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;

當然也可以通過如下來獲取應用程序根目錄而不是得到bin目錄

?
1
Directory.GetCurrentDirectory()

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

?
1
AppContext.BaseDirectory

在.NET 4.X之前獲取應用程序集名稱通過如下來獲取:

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

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

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

版本通過如下來獲取(.net core也一樣):

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

在類庫項目中我們利用強類型配置來實現讀取配文件數據,我們首先需要下載如下擴展。

如何在ASP.NET Core類庫項目中讀取配置文件詳解

在ConfigurationBuilder類中如下一個Add添加方法:

?
1
2
3
4
5
6
7
8
9
10
11
//
  // 摘要:
  //  Adds a new configuration source.
  //
  // 參數:
  // source:
  //  The configuration source to add.
  //
  // 返回結果:
  //  The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
  public IConfigurationBuilder Add(IConfigurationSource source);

對于AddJsonFile擴展方法來添加JSON文件名,文件路徑已經通過SetBasePath()方法來實現,一切配置都是基于IConfigurationBuilder接口,其中就有一個JsonConfigurationSource類,實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//
 // 摘要:
 //  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.
  //
  // 參數:
  // builder:
  //  The Microsoft.Extensions.Configuration.IConfigurationBuilder.
  //
  // 返回結果:
  //  A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  public override IConfigurationProvider Build(IConfigurationBuilder builder);
 }

我們再看其父類就有一個添加JSON文件路徑的方法,如下:

如何在ASP.NET Core類庫項目中讀取配置文件詳解

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

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

上述添加JSON文件皆可,我發現添加JSON文件必須設置JSON文件所在的目錄即必須首先要設置SetBasePath方法,否則會報如下錯誤:

如何在ASP.NET Core類庫項目中讀取配置文件詳解

我們搞個測試JSON文件放在當前項目(StudyEFCore.Data)中如下:

如何在ASP.NET Core類庫項目中讀取配置文件詳解

最終讀取類庫項目JSON配置文件,將其封裝起來就成了如下這個樣子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
  }
 }

由上有一個還未解決的問題就是如何得到當前類庫項目的路徑,沒有想到一個好的法子,不知看到此文的你有何高見。簡短的調用則是如下:

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

結果如下:

如何在ASP.NET Core類庫項目中讀取配置文件詳解

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

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

總結

本節我們詳細講解了在.net core類庫項目中如何讀取JSON配置中的數據但是還是有點不足,你有何高見?

原文鏈接:http://www.cnblogs.com/CreateMyself/p/6859076.html

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲免费在线观看视频 | 色噜噜视频影院 | 日韩国产欧美一区二区三区 | 亚洲第一色区 | 国产老妇 | 久久婷婷丁香五月色综合啪免费 | www一级片| 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | 国产精品成人扳一级aa毛片 | 国产在线91 | 好男人天堂网 | 亚洲欧美自偷自拍另类小说 | 国产成人久久精品一区二区三区 | 视频在线观看高清免费看 | 国产微拍精品一区 | 99精品国产自产在线观看 | 天天舔天天干天天操 | 国产主播精品在线 | 歪歪动漫小说sss | 阿v天堂2020| 午夜一区二区免费视频 | 日本色频 | 日韩精品一区二区三区视频 | h版欧美大片免费观看 | 黄动漫软件车车好快的车车 | 国产亚洲99影院 | 亚洲品质自拍视频 | 日韩欧美一区二区三区中文精品 | 精品成人片深夜 | 91夜夜人人揉人人捏人人添 | a级毛片毛片免费很很综合 a级黄色视屏 | 疯狂刺激的3p国产在线 | 日韩 视频在线播放 | 国外欧美一区另类中文字幕 | 欧美日韩亚洲另类人人澡 | 强迫高h | 国产裸舞在线一区二区 | 日本福利网 | 女教师巨大乳孔中文字幕免费 | 成年美女黄网站色视频大全免费 | 欧美成人免费观看国产 |