Asp.net Core與類(lèi)庫(kù)讀取配置文件信息的方法
前言
首先開(kāi)一個(gè)腦洞,Asp.net core 被使用這么長(zhǎng)時(shí)間了,但是關(guān)于配置文件(json)的讀取,微軟官方似乎并沒(méi)有給出像.net framework讀取web.config那樣簡(jiǎn)單且完美。嚴(yán)重懷疑這是微軟為了促進(jìn).net core 生態(tài)繁榮搞的一點(diǎn)小手段。
appsetting.Development.json (appsetting.json的內(nèi)容和這個(gè)差不多,下面會(huì)講到多環(huán)境使用)
{
"SettingPath": {
"VideoFilePath": "C:\\Users\\89275\\Desktop\\Projects\\mv",
"FfmpegPath": "C:/Users/89275/Desktop/Projects/mv/ffmpeg.exe",
"FtpPath": "http://192.168.254.1/videofile",
"VirtualPath": "/videoplay"
},
"RedisPath":"192.168.0.108:6379"
}
看了很多Asp.net core 讀取配置文件的博客,感覺(jué)都沒(méi)有很好的解決問(wèn)題。
- 最簡(jiǎn)單的就是在StartUp中通過(guò)Configuration["SettingPath:VirtualPath"]的形式獲取信息;
- 接下來(lái)就是在Controller中獲去配置文件信息,在控制器中讀取配置文件有兩種方法。
第一種是在controller初始化的時(shí)候把IHostingEnvironment,IConfiguration傳過(guò)來(lái),然后把穿過(guò)來(lái)的值賦給controller中對(duì)應(yīng)的變量,酒后就可以正常讀取配置文件了(由于我是個(gè)菜逼,還沒(méi)看明白系統(tǒng)啟動(dòng)的時(shí)候,這兩個(gè)變量是怎么傳給controller的)
public class HomeController : Controller
{
//環(huán)境變量
private readonly IHostingEnvironment hostingEnvironment;
private IConfiguration Configuration;
public HomeController(IHostingEnvironment hostingEnvironment, IConfiguration configuration)
{
this.hostingEnvironment = hostingEnvironment;
Configuration = configuration;
}
pubilc void GetRedisPath()
{
string redisPath = Configuration["RedisPath"];
}
}
第二種是通過(guò)獲取對(duì)象的方式讀取配置文件,最近很多博客說(shuō)的都是關(guān)于這個(gè)的。還是在controller初始化的時(shí)候把IOptions傳進(jìn)來(lái)(這里我還是沒(méi)懂怎么傳過(guò)來(lái)的/(ㄒoㄒ)/~~),然后把傳過(guò)來(lái)的值賦值給Model的對(duì)象,然后就可以正常使用了。
這種方法需要在StartUp中的ConfigureServices中有添加
services.AddOptions();
//SettingPath極為Model
services.Configure<SettingPath>(Configuration.GetSection("SettingPath"));
public class HomeController
{
public SettingPath settingPath;
private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(VideosController));
public HomeController(IOptions<SettingPath> option)
{
settingPath = option.Value;
}
public void GetVideoPath()
{
string path=SettingPath.VideoFilePath
}
}
這里因?yàn)槲也涣私?,IOptions是怎么傳進(jìn)來(lái)的,所以不知道如果有需要只用兩個(gè)或以上Model的情況該怎么處理。
.net core 讀取配置文件公共類(lèi)
前面幾種方法之前都有用過(guò),但是個(gè)人感覺(jué)用起來(lái)都不是很順手。而且如果想要在一個(gè)類(lèi)庫(kù)中讀取配置文件的話簡(jiǎn)直痛苦到不想理媳婦。
所以自己動(dòng)手寫(xiě)了一個(gè)工具類(lèi)
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using System;
namespace Common
{
public class ConfigurationHelper
{
public IConfiguration config { get; set; }
public ConfigurationHelper()
{
IHostingEnvironment env = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>();
config = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
public T GetAppSettings<T>(string key) where T : class, new()
{
var appconfig = new ServiceCollection()
.AddOptions()
.Configure<T>(config.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
return appconfig;
}
}
//我比較喜歡單獨(dú)放這個(gè)類(lèi),但是這樣放更明顯
public class MyServiceProvider
{
public static IServiceProvider ServiceProvider { get; set; }
}
}
使用這個(gè)類(lèi)的話需要在StartUp的Configure中添加
MyServiceProvider.ServiceProvider = app.ApplicationServices;
然后就可以在任何地方使用此類(lèi)讀取配置文件信息了,而且由于ConfigurationHelper初始化時(shí)已經(jīng)默認(rèn)加載環(huán)境變量,所以同時(shí)具備多環(huán)境功能。
string path = new ConfigurationHelper().config["RedisPath"];
SettingPath pathss = new ConfigurationHelper().GetAppSettings<SettingPath>("SettingPath");
參考
- https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1
- https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-2.1
- http://www.dhdzp.com/article/125674.htm
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
ASP.NET實(shí)現(xiàn)Hadoop增刪改查的示例代碼
本篇文章主要介紹了ASP.NET實(shí)現(xiàn)Hadoop增刪改查的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之文章打賞功能(六)
這篇文章主要介紹了利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之文章打賞功能(六) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
在Linux上使用OpenCvSharp的過(guò)程詳解
在本次項(xiàng)目中,我們成功實(shí)現(xiàn)了在Linux上使用OpenCvSharp,并成功配置了OpenCvSharp依賴(lài)庫(kù),實(shí)現(xiàn)了在.NET 6.0環(huán)境下使用C#語(yǔ)言調(diào)用OpenCvSharp庫(kù),實(shí)現(xiàn)的圖片數(shù)據(jù)的讀取以及圖像色彩轉(zhuǎn)換,并進(jìn)行了圖像展示,感興趣的朋友跟隨小編一起看看吧2024-02-02
asp.net 因?yàn)閿?shù)據(jù)庫(kù)正在使用的解決方法
因?yàn)閿?shù)據(jù)庫(kù)正在使用,所以未能獲得對(duì)數(shù)據(jù)庫(kù)的排它訪問(wèn)權(quán)?2009-02-02
.NET下通過(guò)HttpListener實(shí)現(xiàn)簡(jiǎn)單的Http服務(wù)
這篇文章主要為大家詳細(xì)介紹了.NET下通過(guò)HttpListener實(shí)現(xiàn)簡(jiǎn)單Http服務(wù)的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-09-09
WCF中使用nettcp協(xié)議進(jìn)行通訊的方法
這篇文章主要給大家介紹了關(guān)于WCF中使用nettcp協(xié)議進(jìn)行通訊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用WCF具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫(kù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
[Asp.Net MVC4]驗(yàn)證用戶(hù)登錄實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了[Asp.Net MVC4]驗(yàn)證用戶(hù)登錄實(shí)現(xiàn)實(shí)例,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,有需要的小伙伴可以參考下。2016-12-12
ASP.NET網(wǎng)頁(yè)打印(只打印相關(guān)內(nèi)容/自寫(xiě)功能)
朋友要求在前段時(shí)間完成的新聞的網(wǎng)站上加上一個(gè)功能,就是在每篇新聞瀏覽的頁(yè)面, 加一個(gè)打印銨鈕。讓用戶(hù)一點(diǎn)打印,能把整篇文章打印2013-01-01

