2017-04-17 217 views
5

我想在我的ASP.NET Core MVC項目上使用配置變量。ASP.NET核心MVC應用程序設置

這是我走到這一步:

  1. 創建一個appsettings.json
  2. 創建一個AppSettings的類
  3. 現在我試圖注入它的ConfigureServices,但我的配置類無法識別,或者在使用完整引用時:「Microsoft.Extensions.Configuration」GetSection方法無法識別,即

Configuration class not being recognized

GetSection method not being recognized

有關如何使用它的任何想法?

+0

請注意,沒有MVC6,只有MVC1- 5。它現在被稱爲ASP.NET Core 1.x,從版本1開始講清楚它不是MVC5的後繼**,而是一個完全重寫,它與MVC5 **和以前版本的ASP不兼容。 NET MVC – Tseng

回答

7

.NET Core中的整個配置方法非常靈活,但一開始並不明顯。這也可能是最簡單的用一個例子來解釋:

假設一個appsettings.json文件看起來像這樣:

{ 
    "option1": "value1_from_json", 

    "ConnectionStrings": { 
    "DefaultConnection": "Server=,\\SQL2016DEV;Database=DBName;Trusted_Connection=True" 
    }, 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Warning" 
    } 
    } 
} 

appsettings.json文件,你首先需要建立獲取數據在Startup.cs一個ConfigurationBuilder如下:

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

    if (env.IsDevelopment()) 
    { 
     // For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709 
     builder.AddUserSecrets<Startup>(); 
    } 

    builder.AddEnvironmentVariables(); 
    Configuration = builder.Build(); 

然後你可以直接訪問配置,但它的整潔創建選項班浩ld這些數據,然後你可以注入你的控制器或其他類。每個選項類代表appsettings.json文件的不同部分。

在此代碼中,連接字符串被加載到ConnectionStringSettings類中,另一個選項被加載到MyOptions類中。 .GetSection方法獲取文件的一個特定部分appsettings.json文件。再次,這是在Startup.cs中:

public void ConfigureServices(IServiceCollection services) 
{ 
    ... other code 

    // Register the IConfiguration instance which MyOptions binds against. 
    services.AddOptions(); 

    // Load the data from the 'root' of the json file 
    services.Configure<MyOptions>(Configuration); 

    // load the data from the 'ConnectionStrings' section of the json file 
    var connStringSettings = Configuration.GetSection("ConnectionStrings"); 
    services.Configure<ConnectionStringSettings>(connStringSettings); 

這些是設置數據加載到的類。請注意屬性名稱如何配對與設置在JSON文件:

public class MyOptions 
{ 
    public string Option1 { get; set; } 
} 

public class ConnectionStringSettings 
{ 
    public string DefaultConnection { get; set; } 
} 

最後,您可以通過注入OptionsAccessor到控制器訪問這些設置如下:

private readonly MyOptions _myOptions; 

public HomeController(IOptions<MyOptions > optionsAccessor) 
{ 
    _myOptions = optionsAccessor.Value; 
    var valueOfOpt1 = _myOptions.Option1; 
} 

一般來說,整個配置設置過程在Core中非常不同。 Thomas Ardal在他的網站上有很好的解釋:http://thomasardal.com/appsettings-in-asp-net-core/

還有關於Configuration in ASP.NET Core in the Microsoft documentation的更詳細的解釋。

1

tomRedox的回答非常有幫助 - 謝謝。 此外,我已將以下引用更改爲以下版本,以使其正常工作。

「Microsoft.Extensions.Options.ConfigurationExtensions」: 「1.0.2」, 「Microsoft.Extensions.Configuration.Json」: 「1.1.1」

相關問題