2015-12-19 3 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 на строки?Строка соединения ASP.NET 5/EF7 в web.config?

ответ

3

Синтаксис преобразования web.config ориентирован на XML-формат данных. Новые конфигурации состоят из некоторых файлов в формате JSON, и очень легко реализовать сценарии создания.

Прежде всего ASP.NET поддерживает позволяет установить среду назначения путем использования ASPNET_ENV переменной окружения или путем установки Hosting:EnvironmentlaunchSettings.json в файле (см Properties папку вашего проекта). Файл launchSettings.json может быть изменен в Visual Studio в свойствах проекта. Нужно сначала выбрать «Профиль»

enter image description here

и сделать настройки для каждого профиля. В качестве альтернативы можно просто отредактировать файл Properties\launchSettings.json вручную.

Некоторые файлы конфигурации, такие как hosting.json, работают автоматически с использованием промежуточной установки. Таким образом, вы можете установить, например, различные порты и различные привязки интерфейса, указав, например, server.urls в hosting.json и hosting.Development.json.

Для включения промежуточной логики в appsettings.json необходимо изменить конструктор класса Startup в Startup.cs. Например:

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 сделать инъекцию MyContext и SM9Context контекстах баз данных. Можно, например, создать главный appsettings.json файл со всей производительной конфигурацией и создать appsettings.Development.json файл, который перекрывает только один (от двух Data:ConnectionString и Data:SM9ConnectionString) строки подключения:

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

ASP.NET будет совмещать оба файл appsettings.json и дополнительный appsettings.Development.json для создания полного набора параметров конфигурации.

The article и the part документации описывается, как можно использовать постановку в ASP.NET 5.

+0

Как бы доступ общественности 'свойство Configuration' из других приложения, например, в контроллере или фильтре? Я бы предпочел сделать его «частным» и доступным для всего, что ему нужно, через контейнер DI: 'services.AddSingleton (Configuration)'. – ProfK

+0

@ProfK: приведенный выше код использует свойство 'static' и' set' (может быть 'private set;') для 'Configuration':' public static Конфигурация IConfigurationRoot {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.

Смежные вопросы