2014-11-27 12 views
11

Probabilmente sono stato a lungo a fissarlo, ma sono passato in MVC6 per asp.net negli ultimi giorni, mentre mi sto davvero divertendo, non riesco a trovare un modo conveniente per accedere alla configurazione dopo che è stato definito in Start.cs conUtilizzo di IConfiguration a livello globale in mvc6

Configuration = new Configuration() 
    .AddJsonFile("config.json") 
    ... 

Così, ho bisogno di aggiungerlo al dI o è già lì? O dovrei creare una nuova istanza ogni volta che ho bisogno di usarlo, dato che è possibile creare diverse configurazioni (come per IIdentityMessageService) creare un sendgrid.json e caricarlo all'interno del Servizio stesso?

Probabilmente c'è una soluzione molto semplice, ma come ho detto ho guardato questo per giorni.

risposta

15

Esegui il caricamento delle configurazioni solo nel file Startup.cs. Se ne hai bisogno altrove, puoi caricare i valori in POCO appropriati e registrarli nel DI in modo da poterli iniettare dove ti servono. Ciò consente di organizzare la configurazione in diversi file e in diversi POCO in modo appropriato per la propria applicazione. C'è già un supporto per questo nell'iniezione delle dipendenze. Ecco come si farebbe:

A POCO per mettere la configurazione in:

public class SomeOptions 
{ 
    public string EndpointUrl { get; set; } 
} 

tuo Startup.cs carica la configurazione nel POCO e la registra nel DI.

public class Startup 
{ 
    public Startup() 
    { 
     Configuration = new Configuration() 
        .AddJsonFile("Config.json") 
        .AddEnvironmentVariables(); 
    } 

    public IConfiguration Configuration { get; set; } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseMvc(); 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services.Configure<SomeOptions>(options => 
      options.EndpointUrl = Configuration.Get("EndpointUrl")); 

     services.AddMvc(); 
    } 
} 

Poi nel controller ottenere la configurazione POCO creato nella Startup.cs attraverso l'iniezione di dipendenza in questo modo:

public class SomeController 
{ 
    private string _endpointUrl; 
    public SomeController(IOptions<SomeOptions> options) 
    { 
     _endpointUrl = options.Options.EndpointUrl; 
    } 
} 

Testato con 1.0.0-beta1 build di aspnet5.

Per ulteriori informazioni, vedere The fundamentals of ASP.Net 5 Configuration.

+0

Questo era quello che stavo cercando, mi sembra di aver perso l'opzione Configura nella raccolta di servizi. –

+0

Hey AndersNS, ho provato a farlo ma ho ricevuto un errore con 'Opzioni IOztions ' Questo deve essere iniettato? –

+0

Il mio esempio utilizza l'iniezione del costruttore per ottenere IOptions in SomeController sì. – AndersNS