2016-05-19 28 views
1

在我Startup.cs,我有以下樣板代碼:ASP.NET核心:訪問和重新使用配置對象

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

我想要做的就是訪問和重新使用已建Configuration對象與我的項目中的其他地方的控制器,而不必在那裏建立一個新的配置對象。我該怎麼做,甚至有可能?

+0

問題是:你爲什麼要這樣做?我想不出爲什麼你需要'IConfigurationRoot'元素,除了固化啓動/引導以外的任何地方。你應該讀取配置並將其反序列化爲'IOptions '類型,可以在任何地方注入 – Tseng

+0

同意。感謝您的意見。 – robbpriestley

回答

0

您有幾種選擇:

  1. 存儲在一個全局變量的配置對象。
    • 臨:簡單。
    • Con:創建耦合並讓所有人都知道Configuration對象。沒有DI。沒有類型安全。
  2. 將配置對象添加到DI容器,並在需要的地方使用它。
    • 臨:解耦。支持DI。答:您讓其他組件知道配置。沒有類型安全。
  3. 通過使用IOptions或使用ConfigurationBinder創建選項對象並將其添加到容器中。
    • 親:好的架構,其中每個組件只知道選項對象。支持DI。類型安全。
    • Con:更多代碼。

對於一個Hello World應用程序的大小,選擇1號作品就好了。對於真實世界的應用程序,我一定會考慮#3。

+0

選擇#3 IOptions是要走的路。它看起來像適當的慣例。我只是沒有意識到這一點。我遵循這個教程:http://www.davidhayden.me/blog/asp-net-5-configuration-and-ioptions。我遇到了一個非常重要的障礙,即需要將Microsoft.Extensions.Options.ConfigurationExtensions添加到project.json中才能使教程正常工作。 – robbpriestley