Dot-Net

如何從 appsettings.json 中獲取價值

  • May 3, 2017
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/

引用自:https://stackoverflow.com/questions/43757189