2016-05-24 12 views
6

Sono nuovo a ASP.NET Core RC2 e mi chiedevo come posso ottenere alcune impostazioni di configurazione e applicarlo al mio metodo. Per esempio nel mio appsettings.json ho questa impostazioneAsp.Net core come posso sostituire il Configuration Manager

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

Nel mio controller ogni volta che voglio interrogare il database devo usare questa configurazione specifica

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

Il pitfull ovvia è che se voglio per aggiungere altro alla configurazione, devo cambiare ogni singola istanza di quel metodo. La mia domanda è come posso ottenere il DefaultConnection nel appsettings.json modo che io possa fare qualcosa di simile

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

Non conosco nulla per quanto riguarda le impostazioni di JSON, ma penso che questo sia ciò che state cercando. http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

risposta

9

In ASP.NET core ci sono un sacco di opzioni che è possibile utilizzare per accedere alla configurazione. Sembra che se sei interessante accedendo allo DefaultConnection starai meglio usando l'approccio DI. Per assicurarti di poter utilizzare l'injection dependency del costruttore, dobbiamo configurare correttamente alcune cose nel nostro 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(); 
} 

Ora abbiamo letto la nostra configurazione JSON dal costruttore ed assegnato al nostro Configuration esempio. Ora, dovremo configurarlo per l'iniezione delle dipendenze, quindi iniziamo creando un semplice POCO per contenere la stringa di connessione.

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

Stiamo implementando il "Options Pattern" dove ci leghiamo classi fortemente tipizzato alla configurazione segmenti. Ora, in ConfigureServices fare questo:

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

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

Ora che questo è tutto a posto, possiamo semplicemente richiedere al costruttore della classe ad assumere la IOptions<ConnectionStrings> e saremo dato un esempio materializzato della classe che contiene il valori di configurazione.

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 è la documentazione ufficiale, che io consiglio sempre come deve leggere.

+0

Grazie mille per la spiegazione dettagliata, leggerò anche il documentazione ora. – user1591668

Problemi correlati