web-dev-qa-db-ja.com

コントローラクラスのappsettings.json値にアクセスする

Startup.cs外のappsettings.json値を読み取る方法を理解するのに問題があります。私がしたいことは、たとえば、_Layout.cshtmlにあり、設定からサイト名を追加します:

例えば:

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

またはさらに良い:

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

これまでのところ私のコードです:

[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; }

ドキュメントを間違って読んでいるのかもしれませんが、Startupクラスの外にConfigurationオブジェクトを公開しているようには見えません。

14
Andy Evans

あなたのStartup.cs

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

次に、コントローラで:

public class ValuesController : Controller
{
    IConfiguration configuration;

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