web-dev-qa-db-fra.com

Accéder aux valeurs appsettings.json dans les classes de contrôleur

Ayant du mal à comprendre comment lire les valeurs appsettings.json en dehors de startup.cs. Ce que je voudrais faire, par exemple, est dans le _Layout.cshtml, ajoutez le nom du site dans la configuration:

Par exemple:

ViewData["SiteName"] = Configuration.GetValue<string>("SiteSettings:SiteName");

Ou encore mieux:

public class GlobalVars {
    public static string SiteName => Configuration.GetValue<string>("SiteSettings:SiteName");
}

Voici mon code jusqu'à présent:

[appsettings.json]

"SiteSettings": {
    "SiteName": "MySiteName"
}

[startup.cs]

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    var siteName = Configuration.GetValue<string>("SiteSettings:SiteName");
}

public IConfigurationRoot Configuration { get; }

Peut-être que je lis mal les documents, mais je n'arrive pas à exposer l'objet Configuration en dehors de la classe Startup.

14
Andy Evans

Dans votre Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IConfiguration>(Configuration);
    }

puis dans votre contrôleur:

public class ValuesController : Controller
{
    IConfiguration configuration;

    public ValuesController(IConfiguration configuration)
    {
        this.configuration = configuration;
    }
}
32
Gabriel Ferrarini