2016-05-24 19 views
6

ASP.NET Core RC2 için yeniyim ve bazı yapılandırma ayarlarını nasıl alabilirim ve yöntemime uygulayabilirim. Benim appsettings.json Mesela ben bu kurumdan kullanmak zorunda benim Denetleyicisi ben veritabanını sorgulamak istediğiniz her zamanAsp.Net çekirdeği Configuration Manager'ı nasıl değiştirebilirim?

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

ayar bu özgü olan

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

burada bariz pitfull ben istersem olmasıdır Yapılandırmaya daha fazla eklemek için bu yöntemin her bir örneğini değiştirmek zorundayım. Sorum ben yapılandırmayı erişmek için kullanabileceğiniz bir çok seçenek vardır ASP.NET Çekirdek bu

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

Json uygulama ayarları ile ilgili hiçbir şey bilmiyorum ama bence bu sizin peşinde olduğun şey. http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

cevap

9

gibi bir şey, böylece ben appsettings.json içinde DefaultConnection böyle ulaşır. DefaultConnection'a erişirken ilginç iseniz, DI yaklaşımını kullanmanız daha iyi olur. Yapıcı bağımlılık enjeksiyonunu kullanabilmeniz için Startup.cs'umuzda birkaç şeyi doğru şekilde yapılandırmamız gerekir.

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(); 
} 

Biz şimdi oluşturucu bizim yapılandırmayı JSON okuyun ve Configuration örneğine atadınız. Şimdi, bağımlılık enjeksiyonu için yapılandırmamız gerekecek - bu yüzden bağlantı dizesini tutmak için basit bir POCO oluşturarak başlayalım.

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

Biz segmentleri konfigürasyona kesinlikle yazılan sınıfları bağlayan "Options Pattern" uyguluyoruz.

bu her yerde olduğunu Şimdi
public void ConfigureServices(IServiceCollection services) 
{ 
    // Setup options with DI 
    services.AddOptions(); 

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

, biz sadece IOptions<ConnectionStrings> üstlenmesi sınıfın yapıcı gerektirebilir ve biz içeren sınıfın bir materialized örneğini de olur: Şimdi, ConfigureServices bunu yapılandırma değerleri.

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 bir okumalı olarak hep önermek resmi belgedir.

+0

Detaylı açıklama için çok teşekkür ederim, ayrıca okuyacağım şimdi belgeler. – user1591668