2016-05-24 16 views
6

Jestem nowy w ASP.NET Core RC2 i zastanawiałem się, jak mogę uzyskać niektóre ustawienia konfiguracji i zastosować go do mojej metody. Na przykład w moim appsettings.json mam ten określonąwartośćdlaRdzeń Asp.Net, jak mogę zastąpić Configuration Manager

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

w moim kontrolera za każdym razem Chcę kwerendy bazy danych muszę używać tej konfiguracji

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

Oczywistym pitfull tutaj jest to, że jeśli chcę aby dodać więcej do konfiguracji, muszę zmienić każdą instancję tej metody. Moje pytanie brzmi: w jaki sposób mogę uzyskać DefaultConnection w appsettings.json tak, że mogę zrobić coś takiego

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

Nie wiem nic o ustawieniach aplikacji json, ale myślę, że właśnie o to prosisz. http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

Odpowiedz

9

W ASP.NET Rdzenia istnieje wiele opcji, które można użyć, aby uzyskać dostęp do konfiguracji. Wygląda na to, że jeśli interesuje cię uzyskanie dostępu do usługi DefaultConnection, lepiej jest zastosować podejście DI. Aby upewnić się, że można użyć iniekcji zależnej od konstruktora, musimy poprawnie skonfigurować kilka rzeczy w naszym 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(); 
} 

Mamy teraz czytać naszą konfigurację JSON z konstruktora i przypisać go do naszego Configuration instancji. Teraz musimy skonfigurować go pod kątem wtrysku zależności - zacznijmy więc od stworzenia prostego zestawu znaków, który będzie utrzymywał ciąg połączenia.

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

Jesteśmy realizacji "Options Pattern" gdzie wiążą się silnie wpisany klasy do konfiguracji segmentów. Teraz, w ConfigureServices to zrobić:

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

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

teraz, że to wszystko jest na swoim miejscu, może po prostu wymagać konstruktora klasy wziąć na IOptions<ConnectionStrings> i będziemy mieć zmaterializowaną instancję klasy zawierającej wartości konfiguracyjne.

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 jest oficjalnym dokumentem, który ja zawsze sugerują jako musi przeczytać.

+0

Dziękuję bardzo za szczegółowe wyjaśnienie, przeczytam również dokumentacja teraz. – user1591668

Powiązane problemy