2016-07-13 3 views
1

startup.csの外でappsettings.jsonの値を読み取る方法がわかりません。私は何をしたいのは、例えば、ある_Layout.cshtmlであり、設定からサイト名を追加します。コントローラクラスのappsettings.json値にアクセスする

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.csで

+0

あなたがこれを見ました:http://stackoverflow.com/questions/31453495/how-to-read- configset-values-from-config-json-in-asp-net-vnext –

答えて

8

あなたのコントローラで、その後
public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddSingleton<IConfiguration>(Configuration); 
    } 

public class ValuesController : Controller 
{ 
    IConfiguration configuration; 

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

これはうまくいきます。 GlobalVars.csのようなものを静的に参照する方法を知っていますので、これを各コントローラの先頭に宣言する必要はありませんか? –

+1

シングルトンを作成し、シングルトンからConfigurationプロパティを公開することができます。常に同じインスタンスであることを確認してください。次に、そこに新しいConfigurationインスタンスを作成する代わりに、Startupで使用することができます。これにより、他のレイヤーがプロパティを利用できるようになります。 –

+0

これは実際にはIConfigurationの悪用です。コントローラーは構成ミドルウェアを気にする必要はありません。 1つの設定を渡すだけで動作する必要はありません。これは、おそらくIOption <>オブジェクトの形でコントローラに設定を登録して注入する必要がある* DI *です –

関連する問題