2015-12-07 6 views
6

voglio caricare tutte le impostazioni di coppia chiave-valore da file JSON in una sola volta e utilizzare le impostazioni valore della chiave in MVC 6 pagina di visualizzazione in cui required.I sarebbe grata se la soluzione migliore è avere un provided.I scenerio come di seguitoCome ottenere i dati dalle impostazioni json alla vista mvc 6?

if(Settings.enable_logo_text) 
{ 
<span>Settings.logo_text</span> 
} 

risposta

6

Il official documentation per quanto riguarda la nuova configurazione e le opzioni è abbastanza buono, consiglierei di dare un'occhiata prima lì.

Seguendo le indicazioni fornite lì, inizia con la creazione di una classe POCO per le impostazioni:

public class Settings 
{ 
    public string logo_text { get; set; } 
    public bool enable_logo_text { get; set; } 
} 

Aggiornare il metodo ConfigureServices della classe di avvio in modo di leggere le impostazioni dalla configurazione configurato ed è quindi disponibile come servizio che può essere iniettato ovunque è necessario:

public void ConfigureServices(IServiceCollection services) 
{ 
    ... 

    services.Configure<Settings>(Configuration); 
    services.AddOptions(); 
} 

Se si desidera utilizzare un file del appsettings.json, assicuratevi anche costruire il vostro oggetto Configuration tra cui quel file jSON. Per esempio:

public Startup(IHostingEnvironment env) 
{ 
    // Set up configuration sources. 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

In questo modo è possibile configurare i valori nel file appsettings.json ei valori verranno impostati sul vostro Settings classe:

{ 
    ... 

    "enable_logo_text": true, 
    "logo_text": "My Logo Text" 
} 

Infine, è possibile accedere ai valori configurati da aggiunta di una dipendenza IOptions<Settings>. Il modo più semplice sarebbe quella di iniettare direttamente le opzioni nella vista (come spiegato nel the docs), ma si potrebbe prendere in considerazione l'iniezione le opzioni nel controller e di passarli alla vista in un modo più controllato:

@inject IOptions<Settings> Settings 
... 
@if(Settings.Value.enable_logo_text) 
{ 
    <span>@Settings.Value.logo_text</span> 

} 
Problemi correlati