zukucode
主にWEB関連の情報を技術メモとして発信しています。

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

今回はわかりやすくするため、コントローラーに実装しましたが、実際はデータベース関連の処理は、コントローラーに実装するのではなく、データアクセス層やインフラ層のような別プロジェクトを作成して、そこに実装することが多いです。


関連記事