目錄索引 【無私分享:ASP.NET CORE 項目實戰】目錄索引 簡介 我們在 讀取配置文件(一) appsettings.json 中介紹了,如何讀取appsettings.json. 但隨之產生了問題:我們使用的是在 Startup.cs 中(如下圖)來實現配置讀取,有兩個問題 ① 我們如果定 ...
目錄索引
簡介
我們在 讀取配置文件(一) appsettings.json 中介紹了,如何讀取appsettings.json.
但隨之產生了問題:我們使用的是在 Startup.cs 中(如下圖)來實現配置讀取,有兩個問題 ① 我們如果定義N種配置,是否要再這裡添加N條這樣的配置 ; ② 如果我們的配置不想寫在appsettings.json中呢
解決問題
帶著上面的兩個問題,我們首先來添加一個配置文件 siteconfig.json
{
"SiteBaseConfig": {
//文件上傳路徑
"FileUpPath": "/upload/",
//是否啟用單用戶登錄
"IsSingleLogin": "True",
//允許上傳的文件格式
"AttachExtension": "gif,jpg,jpeg,png,bmp,rar,zip,doc,docx,xls,xlsx,ppt,pptx,txt,flv,apk,mp4,mpg,ts,mpeg,mp3,bak,pdf",
//圖片上傳最大值KB
"AttachImagesize": 12400
}
}
我們在 讀取文件配置(一)中的配置類 ApplicationConfiguration
1 public class ApplicationConfiguration 2 { 3 #region 屬性成員 4 5 /// <summary> 6 /// 文件上傳路徑 7 /// </summary> 8 public string FileUpPath { get; set; } 9 /// <summary> 10 /// 是否啟用單用戶登錄 11 /// </summary> 12 public bool IsSingleLogin { get; set; } 13 /// <summary> 14 /// 允許上傳的文件格式 15 /// </summary> 16 public string AttachExtension { get; set; } 17 /// <summary> 18 /// 圖片上傳最大值KB 19 /// </summary> 20 public int AttachImagesize { get; set; } 21 #endregion 22 }
在 project.json 的 buildOptions 添加 "copyToOutput": "siteconfig.json",讓該文件在編譯的時候自動拷貝到輸出目錄下(預設為bin目錄):
修改 讀取文件配置(一) 的領域層 AppConfigurtaionServices
public class AppConfigurtaionServices
{
public T GetAppSettings<T>(string key)where T:class,new()
{
IConfiguration config = new ConfigurationBuilder()
.Add(new JsonConfigurationSource { Path= "siteconfig.json", ReloadOnChange=true })
.Build();
var appconfig= new ServiceCollection()
.AddOptions()
.Configure<T>(config.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
return appconfig;
}
}
說明:我們首先創建了一個ConfigurationBuilder對象,併在它上面註冊了一個JsonConfigurationSource。在創建這個JsonConfigurationSource對象的時候,除了指定配置文件(“siteconfig.json”)的路徑之外,我們還將它的 ReloadOnChange 屬性設置為True。這個ReloadOnChange屬性的含義就是當原始配置文件的內容發生改變的時候是否需要重新載入配置。
這時候我們會發現 Configure<T>(config.GetSection(key)) 報錯:
我查看了我們之前在Startup中的 services.Configure<T>() 發現,這個裡面的參數是有兩個重載的 一個是 IConfiguration 一個是 System.Action<T>,那麼為什麼這裡重載不出來了呢?
十分不解,最後發現是少了擴展類 Microsoft.Extensions.Options.ConfigurationExtensions
我們通過 NuGet 添加這個 Install-Package Microsoft.Extensions.Options.ConfigurationExtensions 問題得到解決,在此感謝 @Artech
我們來測試一下:
OK,這樣,我們在文章開始提出的兩個問題就都得到瞭解決!
希望跟大家一起學習Asp.net Core
剛開始接觸,水平有限,很多東西都是自己的理解和翻閱網上大神的資料,如果有不對的地方和不理解的地方,希望大家指正!
雖然Asp.net Core 現在很火熱,但是網上的很多資料都是前篇一律的複製,所以有很多問題我也暫時沒有解決,希望大家能共同幫助一下!
原創文章 轉載請尊重勞動成果 http://yuangang.cnblogs.com