2016-05-24 3 views
6

Ich bin neu in ASP.NET Core RC2 und ich frage mich, wie kann ich einige Konfigurationseinstellungen und wenden Sie es an meine Methode. Zum Beispiel in meinem appsettings.json habe ich diese spezielleAsp.Net Kern Wie kann ich den Configuration Manager ersetzen

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

In meiner Reglereinstellung jedes Mal, wenn ich die Datenbank abfragen mag Ich habe dieses Setup verwenden

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

Die offensichtliche pitfull hier ist, dass, wenn ich will Um der Konfiguration mehr hinzuzufügen, muss ich jede einzelne Instanz dieser Methode ändern. Meine Frage ist, wie kann ich die DefaultConnection im appsettings.json bekommen, so dass ich so etwas wie dieses

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

Ich weiß nichts über Json App-Einstellungen, aber ich denke, das ist, was Sie suchen. http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

Antwort

9

In ASP.NET Core- gibt es viele Möglichkeiten tun können Sie die Konfiguration zugreifen können. Es scheint, als ob Sie interessant sind, Zugriff auf die DefaultConnection Sie wäre besser dran mit der DI Ansatz. Um sicherzustellen, dass Sie die Construction Dependency Injection verwenden können, müssen wir einige Dinge in unserem Startup.cs richtig konfigurieren.

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

Wir haben nun unsere Konfiguration JSON vom Erbauer und zugewiesen an unsere Configuration Instanz lesen. Jetzt müssen wir es für die Abhängigkeitsinjektion konfigurieren. Beginnen wir mit der Erstellung eines einfachen POCO, um die Verbindungszeichenfolge zu speichern.

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

Wir setzen die "Options Pattern", wo wir stark typisierte Klassen binden Segmente zur Konfiguration. Nun, in ConfigureServices dies tun:

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

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

nun, dass dies alles an seinem Platz ist, können wir einfach den Konstruktor der Klasse erfordern auf den IOptions<ConnectionStrings> zu nehmen, und wir werden eine materialisierte Instanz der Klasse gegeben werden, die die Konfigurationswerte.

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 ist die offizielle Dokumentation, die ich immer als ein lesen.

+0

Vielen Dank für die detaillierte Erklärung, ich werde auch lesen Dokumentation jetzt. – user1591668

Verwandte Themen