Dot-Net
如何從 appsettings.json 中獲取價值
public class Bar { public static readonly string Foo = ConfigurationManager.AppSettings["Foo"]; }在 .NET Framework 4.x 中,我可以使用 進入
ConfigurationManager.AppSettings ["Foo"],Foo然後Webconfig我可以很容易地得到Foothrough的值Bar.Foo但是在.Net core中,我必須要注入
options,並且無法得到Foothrough的值Bar.Foo有沒有一種方法,可以直接通過
Bar.Foo獲取 的值Foo?
所以實際上有兩種方法可以解決這個問題。
選項 1:選項類
你有一個 appsettings.json 文件:
{ "myConfiguration": { "myProperty": true } }您可以像這樣創建一個配置 POCO:
public class MyConfiguration { public bool MyProperty { get; set; } }在您的 startup.cs 中,您的 ConfigureServices 中有一些東西可以註冊配置:
public void ConfigureServices(IServiceCollection services) { services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration")); }然後在您的控制器/服務中註入 IOptions 並且它是可用的。
public class ValuesController : Controller { private readonly MyConfiguration _myConfiguration; public ValuesController(IOptions<MyConfiguration> myConfiguration) { _myConfiguration = myConfiguration.Value; } }就我個人而言,我不喜歡使用 IOptions,因為我認為它會拖累一些我並不真正想要的額外垃圾,但你可以做一些很酷的事情,比如熱交換之類的東西。
選項 2:配置 POCO
它幾乎相同,但在您的配置服務方法中,您改為綁定到 POCO 的單例。
public void ConfigureServices(IServiceCollection services) { //services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration")); services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>()); }然後你可以直接注入 POCO :
public class ValuesController : Controller { private readonly MyConfiguration _myConfiguration; public ValuesController(MyConfiguration myConfiguration) { _myConfiguration = myConfiguration; } }有點簡單,因為您可能應該使用介面來使單元測試更容易一些,但您明白了。
主要取自這裡:http ://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/