2015-12-19 26 views
4

在ASP.Net 4.5中,我可以將連接字符串放在web.config中,以便利用web.config transformations,所以我可以在開發數據庫本地工作,然後在發佈時指向生產數據庫。我現在正在使用ASP.Net 5和EF 7,它似乎使用config.json文件來存儲連接字符串而不是web.config。有了這種新的存儲文件的方式,我無法弄清楚如何做類似於過去的web.config transformations。我怎麼可以設置config.json來做到這一點或配置它,所以我可以在web.config中做到這一點,並有EF看那裏的字符串?web.config中的ASP.NET 5/EF7連接字符串?

回答

3

web.config轉換語法是面向XML格式的數據。新的配置由一些JSON格式的文件組成,並且可以非常容易地實現登臺場景。

所有ASP.NET首先支持允許設置通過使用ASPNET_ENV環境變量或通過在launchSettings.json文件(見項目的Properties文件夾)設置Hosting:Environment目標環境。文件launchSettings.json可以在Visual Studio中的項目屬性中進行修改。每個人都應該首先選擇「檔案」

enter image description here

,並設置每個配置文件。或者,您可以手動編輯文件Properties\launchSettings.json

一些配置文件,例如hosting.json自動使用登臺。因此,例如,您可以通過在hosting.jsonhosting.Development.json中指定server.urls來設置不同的端口和不同的接口綁定。

若要在appsettings.json中包含登臺邏輯,需要在Startup.cs中修改Startup類的構造函數。例如:

public class Startup 
{ 
    public static IConfigurationRoot Configuration { get; set; } 

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

    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddMvc() 
      .AddJsonOptions(options => { 
       options.SerializerSettings.ContractResolver = 
        new CamelCasePropertyNamesContractResolver(); 
      }); 
     services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<MyContext>(options => { 
       options.UseSqlServer(Configuration["Data:ConnectionString"]); 
      }) 
      .AddDbContext<SM9Context>(options => { 
       options.UseSqlServer(Configuration["Data:SM9ConnectionString"]); 
      }); 
    } 
} 

上面的代碼保存配置Configuration屬性,然後使用ConfigureServices做出的MyContextSM9Context數據庫上下文注射。例如你可以創建主appsettings.json文件,所有生產配置和創建appsettings.Development.json文件,該文件只覆蓋一個(從兩個Data:ConnectionStringData:SM9ConnectionString)連接字符串:

{ 
    "Data": { 
    "ConnectionString": "Server=..." 
    } 
} 

ASP.NET將結合這兩個文件appsettings.json和可選appsettings.Development.json創建全套配置參數。

The article和文檔的the part描述了一個如何使用分期ASP.NET 5.

+0

你怎麼會從其他地方訪問公共'Configuration'財產中的應用,例如在控制器或過濾器?我寧願將它設置爲'private',並通過DI容器提供給需要它的任何東西:'services.AddSingleton (Configuration)'。 – ProfK

+0

@ProfK:上面的代碼使用'static'和'set'屬性(可以是'private set;')作爲'Configuration':'public static IConfigurationRoot Configuration {get;私人設置; }'。因此,可以在代碼的每個部分使用'Startup.Configuration [「Data:ConnectionString」]'來讀取應用程序配置中的任何信息。 – Oleg

2

你可以做這樣的事情來從不同的* .json文件中取得配置文件,下面的文件是以環境或環境變量爲基礎的。

var builder = new ConfigurationBuilder() 
    .AddJsonFile("appsettings.json") 
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 
    .AddEnvironmentVariables(); 

您也可以使用ASPNET祕密管理器。

每次訪問配置時,它都會覆蓋它所具有的任何配置值的設置,這意味着該變量將反映設置爲最後的所有配置值。

查看docs on Configuration