2016-05-24 7 views
6

私はを初めて使用しています。ASP.NET Core RC2と私はいくつかの設定を取得して自分のメソッドに適用することができますか?例えば、私のappsettings.jsonに私は私のコントローラでAsp.Netコアコンフィグレーションマネージャを置き換えるにはどうすればいいですか

"ConnectionStrings": { 
    "DefaultConnection": 
     "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;" 
    } 

私は私がここで明らかpitfullがあれば、私が欲しいということです。このセットアップ

using (var conn = 
    new NpgsqlConnection(
     "Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;")) 
{ 
    conn.Open(); 
} 

を使用する必要がデータベースを照会するたびに設定し、この特定を持っていますより多くの設定を追加するには、そのメソッドのすべての単一インスタンスを変更する必要があります。私の質問は、私はあなたが設定にアクセスするために使用できる多くのオプションがありますASP.NETコアではこの

using (var conn = 
    new NpgsqlConnection(
     ConfigurationManager["DefaultConnection")) 
{ 
    conn.Open(); 
} 
+0

私はjsonアプリの設定に関して何も知らないけど、これはあなたが何をしているのかと思う。 http://stackoverflow.com/questions/31453495/how-to-read-appsettings-values-from-config-json-in-asp-net-vnext –

答えて

9

ような何かを行うことができますように、私はappsettings.jsonDefaultConnectionを得ることができる方法です。あなたがDefaultConnectionにアクセスするのが面白いかのように思えますが、DIアプローチを使用する方が良いでしょう。コンストラクタ依存性注入を使用できるようにするには、Startup.csでいくつかの設定を正しく行う必要があります。

public IConfigurationRoot Configuration { get; } 

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

    Configuration = builder.Build(); 
} 

現在ビルダーから私たちの設定JSONを読んで、私たちのConfigurationインスタンスに割り当てられています。さて、依存性注入用に設定する必要があります。まず、接続文字列を保持するための簡単なPOCOを作成してみましょう。

public class ConnectionStrings 
{ 
    public string DefaultConnection { get; set; } 
} 

我々は、セグメントを構成に強く型付けされたクラスをバインドする"Options Pattern"を実装しています。

が、これはすべての場所であることを今
public void ConfigureServices(IServiceCollection services) 
{ 
    // Setup options with DI 
    services.AddOptions(); 

    // Configure ConnectionStrings using config 
    services.Configure<ConnectionStrings>(Configuration); 
} 

、我々は単にIOptions<ConnectionStrings>を取るために、クラスのコンストラクタを必要とすることができ、我々は含むクラスのマテリアライズド・インスタンスが与えられます:さて、ConfigureServicesでこれを行います構成値。

public class MyController : Controller 
{ 
    private readonly ConnectionStrings _connectionStrings; 

    public MyController(IOptions<ConnectionString> options) 
    { 
     _connectionStrings = options.Value; 
    } 

    public IActionResult Get() 
    { 
     // Use the _connectionStrings instance now... 
     using (var conn = new NpgsqlConnection(_connectionStrings.DefaultConnection)) 
     { 
      conn.Open(); 
      // Omitted for brevity... 
     } 
    } 
} 

Hereを読まなければならないと私はいつも示唆公式ドキュメントです。

+0

詳細な説明をありがとう、私はドキュメンテーション – user1591668

関連する問題