ASP.NET Core DBの接続文字列を設定ファイルから取得する
ASP.NET Core
のプロジェクトで、データベースの接続文字列を設定ファイルから取得する方法を紹介します。
ASP.NET Core + Reactのプロジェクトを作成するで作成したプロジェクトに対して修正します。
設定ファイルの修正
ASP.NET Core
のプロジェクトを作成すると、デフォルトでappsettings.json
という設定ファイルが作成されています。
appsettings.Development.json
というファイルもありますが、こちらは開発時のみ読み込まれる設定ファイルです。
例えばログの出力レベルを開発時はdebug
、本番ではinformation
にするなど、開発時だけ設定内容を上書きしたい場合などに使用します。
このファイルに接続文字列の情報を追記します。
接続文字列はASP.NET Core Docker環境のPostgreSQLに接続してデータを取得するで紹介したものと同じ環境とします。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Server=db;Database=docker_db;Uid=docker_user;Pwd=docker_pass;"
}
}
設定ファイルの読込
以下のように、コンストラクタでIConfiguration
をパラメータに追加して、ローカル変数にセットします。
_configuration.GetConnectionString("DefaultConnection")
で、設定ファイルの接続文字列を取得できます。
private readonly ILogger<WeatherForecastController> _logger;
private readonly IConfiguration _configuration;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
using var conn = new NpgsqlConnection("Server=db;Database=docker_db;Uid=docker_user;Pwd=docker_pass;");
using var conn = new NpgsqlConnection(_configuration.GetConnectionString("DefaultConnection"));
コンストラクタの引数にオブジェクトを追加するのは依存関係の挿入やDI(Dependency Injection)と呼ばれます。
ASP.NET Core
ではこのDI
の考え方がとても重要になります。
以下のMicrosoftのページが参考になります。
https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-7.0
今回はわかりやすくするため、コントローラーに実装しましたが、実際はデータベース関連の処理は、コントローラーに実装するのではなく、データアクセス層やインフラ層のような別プロジェクトを作成して、そこに実装することが多いです。