2016-05-24 7 views
6

Я новичок в ASP.NET Core RC2, и мне было интересно, как я могу получить некоторые параметры конфигурации и применить его к моему методу. Например, в моем appsettings.json у меня есть этот специфический параметрЯдро Asp.Net, как я могу заменить Configuration Manager

"ConnectionStrings": { 
    "DefaultConnection": 
     "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;" 
    } 

В моем контроллере каждый раз, когда я хочу, чтобы запросить базу данных я должен использовать эту конфигурацию

using (var conn = 
    new NpgsqlConnection(
     "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;")) 
{ 
    conn.Open(); 
} 

Очевидный pitfull здесь является то, что если я хочу чтобы добавить больше к конфигурации, мне нужно изменить каждый экземпляр этого метода. Мой вопрос, как я могу получить DefaultConnection в appsettings.json так, что я могу сделать что-то вроде этого

using (var conn = 
    new NpgsqlConnection(
     ConfigurationManager["DefaultConnection")) 
{ 
    conn.Open(); 
} 
+0

Я ничего не знаю о настройках приложения json, но я думаю, что это то, что вам нужно. http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

ответ

9

В ASP.NET Ядра Есть много вариантов, которые можно использовать для доступа к конфигурации. Похоже, если вам интересно, что вы обратились к DefaultConnection, вам было бы лучше использовать подход DI. Чтобы гарантировать, что вы можете использовать инъекцию зависимости конструктора, мы должны правильно настроить несколько вещей в нашем Startup.cs.

public IConfigurationRoot Configuration { get; } 

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) 
     .AddEnvironmentVariables(); 

    Configuration = builder.Build(); 
} 

Мы теперь прочитать нашу конфигурацию JSON от застройщика и назначил его к нашему Configuration экземпляру. Теперь нам нужно сконфигурировать его для инъекции зависимостей, поэтому давайте начнем с создания простой строки POCO для хранения строки подключения.

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

Мы реализуем "Options Pattern" где мы связываем сильно типизированных классов к конфигурационным сегментов. Теперь, в ConfigureServices сделать это:

public void ConfigureServices(IServiceCollection services) 
{ 
    // Setup options with DI 
    services.AddOptions(); 

    // Configure ConnectionStrings using config 
    services.Configure<ConnectionStrings>(Configuration); 
} 

Теперь, когда это все на месте, мы можем просто требовать конструктор класса взять на IOptions<ConnectionStrings>, и мы будем уделять материализованной экземпляр класса, содержащего значения конфигурации.

public class MyController : Controller 
{ 
    private readonly ConnectionStrings _connectionStrings; 

    public MyController(IOptions<ConnectionString> options) 
    { 
     _connectionStrings = options.Value; 
    } 

    public IActionResult Get() 
    { 
     // Use the _connectionStrings instance now... 
     using (var conn = new NpgsqlConnection(_connectionStrings.DefaultConnection)) 
     { 
      conn.Open(); 
      // Omitted for brevity... 
     } 
    } 
} 

Here является официальной документации, которую я всегда предлагаю как должен прочитать.

+0

Большое спасибо за подробное объяснение, я также прочитаю документации. – user1591668

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

  • Нет связанных вопросов^_^