DotNetCore跨平臺~在appsettings.json里自(zi)定(ding)義配(pei)置(zhi)項
DotNetCore里一(yi)(yi)切都是依賴注(zhu)入(ru)的(de)(de)(de),對于appsettings這個可擴展的(de)(de)(de)配置對象也(ye)不例外(wai),它位于項目(mu)根目(mu)錄,一(yi)(yi)般在startup里去(qu)注(zhu)冊它,在類中通過構造方法注(zhu)入(ru)來獲取當前的(de)(de)(de)對象,以便去(qu)使用(yong)它,當然我們(men)也(ye)可以自己去(qu)構建(jian)和使用(yong)它,下(xia)面我就來總結(jie)一(yi)(yi)下(xia)。
傳統方法,startup注入,構造方法使用
1 注意配置類
public class RedisConfiguration { #region 屬性成員 /// <summary> /// 文件上(shang)傳(chuan)路徑 /// </summary> public string Host { get; set; } /// <summary> /// 允(yun)許上(shang)傳的文件格式 /// </summary> public string Password { get; set; } /// <summary> /// 圖片上傳最(zui)大值KB /// </summary> public int IsProxy { get; set; } #endregion }
2 在appsettings里添加它的內(nei)容
{ "Logging": { "IncludeScopes": false, "Debug": { "LogLevel": { "Default": "Warning" } }, "Console": { "LogLevel": { "Default": "Warning" } } }, "RedisConfiguration": { "Host": "localhost:6379", "Password": "bobo123#", "IsProxy": "0" } }
3 在控制器里使(shi)用它,當然你可以(yi)在基類中定(ding)義它的(de)使(shi)用方式,但注入(ru)的(de)入(ru)口還是(shi)在構造方法上
public class ApiControllerBase : Controller { private readonly IOptions<RedisConfiguration> AppConfiguration; public ApiControllerBase(IOptions<RedisConfiguration> appConfiguration) { AppConfiguration = appConfiguration; } }
這時,你的AppConfiguration在被(bei)(bei)加載(zai)后,就有(you)值了,是在程序運行時被(bei)(bei)注入進來的(de)!
屬性中注入并且使用
appsetting的(de)(de)(de)內容不變(bian),只是(shi)在(zai)屬性(xing)中去封裝了配置注(zhu)入(ru)與獲取(qu)的(de)(de)(de)過程(cheng),注(zhu)意,為了考慮性(xing)能,你可以把它的(de)(de)(de)建立(li)和獲取(qu)做成(cheng)單例,這點我就不設計(ji)了!
public RedisConfiguration AppConfigurations
{
get
{
var config = new ConfigurationBuilder()
.AddInMemoryCollection()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
var sp = new ServiceCollection().AddOptions().Configure<RedisConfiguration>(
config.GetSection("RedisConfiguration")).BuildServiceProvider();
var _appConfiguration = sp.GetService<IOptions<RedisConfiguration>>();
return _appConfiguration.Value;
}
}
在(zai)控制(zhi)器上(shang),可以直接(jie)使用它了,我(wo)這個屬性是做在(zai)所有控制(zhi)器的父類上(shang)的。
[HttpGet] public IEnumerable<string> Get() { return new string[] { AppConfigurations.Host, AppConfigurations.Password, AppConfigurations.IsProxy.ToString() }; }
感謝各位的閱讀!
對(dui)于.net core的研究我們還在繼(ji)續(xu),希望core2.0,standard2.0不會讓我們失望!
聽說它已經(jing)實(shi)現了.net frameworks 4.6.1所有的功(gong)能!