2016-02-23 358 views
1

設置了JSON文件在我Startup.cs文件我有以下幾點:無法讀取Startup.cs

public Startup(IHostingEnvironment env) 
{ 
    // Set up configuration sources. 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

public IConfigurationRoot Configuration { get; set; } 

// This method gets called by the runtime. Use this method to add services to the container. 
public void ConfigureServices(IServiceCollection services) 
{ 

    var fooValue = Configuration.Get("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

在我appsettings.json文件我有{ "foo": "bar" }

在我的啓動類後來我:

public void ConfigureServices(IServiceCollection services) 
{ 

    var fooValue = Configuration.Get("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

我嘗試觀看到fooValue變化值在我的當地人通過它設置斷點(與ASP.NET 5擴展VS2015),調試器,但我得到以下錯誤,當我跨過它:

「System.InvalidOperationException」類型發生在微軟的一個例外.Extensions.Configuration.Binder.dll但未在用戶代碼中處理

其他信息:無法創建類型爲'System.String'的實例,因爲它缺少一個無公共的無參數構造函數。

我正在關注的MVA Configuring Data at 18m 53s

我試圖創建一個config.json文件作爲例子,但模板似乎已經改變了,它不反正幫助。

我應該被允許從這樣的.json文件中獲取配置信息嗎?

+0

下面是一個類似的問題與工作示例:http://stackoverflow.com/a/32044957/390421(其中包括加載json數據並通過config.get()調用訪問它。) – MartijnK

+1

此外,你可以找到有關如何在此處訪問嵌套json屬性的更多示例:http://whereslou.com/2014/05/23/asp-net-vnext-moving-parts-iconfiguration/ – MartijnK

回答

2

只是在這裏有一個完整的答案。您正在做的一切正常,但是您選擇的配置節名稱將取代一個密鑰,所以您選擇的配置文件夾爲的過載爲

public static T Get<T>(this IConfiguration configuration, T defaultValue) 

但有一個不同的過載,你可以使用:

public static T Get<T>(this IConfiguration configuration, string key) 

所以,你的代碼應該是這樣的:

public void ConfigureServices(IServiceCollection services) 
{  
    var fooValue = Configuration.Get<string>("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

我認爲,文件是不是很清楚,所以我大多使用反射器或GitHub源代碼來找出API實際正在做什麼。這裏是該包的public repository的鏈接。

+0

謝謝。對我來說,長遠目標必須是如何更好地理解那裏的公共示例。 – Louis

2

要回答你的問題:是你可以搶配置了以.json文件,只是改變

Configuration.Get("foo"); 

到:

Configuration.Get<string>("foo"); 

,你將能夠讀取它。