Asp.net Core與類庫讀取配置文件信息的方法
前言
首先開一個腦洞,Asp.net core 被使用這么長時間了,但是關于配置文件(json)的讀取,微軟官方似乎并沒有給出像.net framework讀取web.config那樣簡單且完美。嚴重懷疑這是微軟為了促進.net core 生態(tài)繁榮搞的一點小手段。
appsetting.Development.json (appsetting.json的內容和這個差不多,下面會講到多環(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 讀取配置文件的博客,感覺都沒有很好的解決問題。
- 最簡單的就是在StartUp中通過Configuration["SettingPath:VirtualPath"]的形式獲取信息;
- 接下來就是在Controller中獲去配置文件信息,在控制器中讀取配置文件有兩種方法。
第一種是在controller初始化的時候把IHostingEnvironment,IConfiguration傳過來,然后把穿過來的值賦給controller中對應的變量,酒后就可以正常讀取配置文件了(由于我是個菜逼,還沒看明白系統(tǒng)啟動的時候,這兩個變量是怎么傳給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"];
}
}
第二種是通過獲取對象的方式讀取配置文件,最近很多博客說的都是關于這個的。還是在controller初始化的時候把IOptions傳進來(這里我還是沒懂怎么傳過來的/(ㄒoㄒ)/~~),然后把傳過來的值賦值給Model的對象,然后就可以正常使用了。
這種方法需要在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
}
}
這里因為我不了解,IOptions是怎么傳進來的,所以不知道如果有需要只用兩個或以上Model的情況該怎么處理。
.net core 讀取配置文件公共類
前面幾種方法之前都有用過,但是個人感覺用起來都不是很順手。而且如果想要在一個類庫中讀取配置文件的話簡直痛苦到不想理媳婦。
所以自己動手寫了一個工具類
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;
}
}
//我比較喜歡單獨放這個類,但是這樣放更明顯
public class MyServiceProvider
{
public static IServiceProvider ServiceProvider { get; set; }
}
}
使用這個類的話需要在StartUp的Configure中添加
MyServiceProvider.ServiceProvider = app.ApplicationServices;
然后就可以在任何地方使用此類讀取配置文件信息了,而且由于ConfigurationHelper初始化時已經(jīng)默認加載環(huán)境變量,所以同時具備多環(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://m.fzitv.net/article/125674.htm
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
ASP.NET實現(xiàn)Hadoop增刪改查的示例代碼
本篇文章主要介紹了ASP.NET實現(xiàn)Hadoop增刪改查的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
利用ASP.NET MVC和Bootstrap快速搭建個人博客之文章打賞功能(六)
這篇文章主要介紹了利用ASP.NET MVC和Bootstrap快速搭建個人博客之文章打賞功能(六) 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
asp.net 因為數(shù)據(jù)庫正在使用的解決方法
因為數(shù)據(jù)庫正在使用,所以未能獲得對數(shù)據(jù)庫的排它訪問權?2009-02-02
.NET下通過HttpListener實現(xiàn)簡單的Http服務
這篇文章主要為大家詳細介紹了.NET下通過HttpListener實現(xiàn)簡單Http服務的相關資料,感興趣的小伙伴們可以參考一下2016-09-09
ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫
這篇文章主要為大家詳細介紹了ASP.NET保存PDF、Word和Excel文件到數(shù)據(jù)庫的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
[Asp.Net MVC4]驗證用戶登錄實現(xiàn)實例
這篇文章主要介紹了[Asp.Net MVC4]驗證用戶登錄實現(xiàn)實例,這里整理了詳細的代碼,具有一定的參考價值,有需要的小伙伴可以參考下。2016-12-12
ASP.NET網(wǎng)頁打印(只打印相關內容/自寫功能)
朋友要求在前段時間完成的新聞的網(wǎng)站上加上一個功能,就是在每篇新聞瀏覽的頁面, 加一個打印銨鈕。讓用戶一點打印,能把整篇文章打印2013-01-01

