1. ホーム
  2. c#

[解決済み] 依存性注入、パラメータ付き注入

2023-07-08 10:42:32

質問

vNextでDIを実装しています。 コンストラクタにパラメータを渡すにはどうしたらよいでしょうか。 例えば、以下のようなクラスがあるとします。

public class RedisCacheProvider : ICacheProvider
{
    private readonly string _connectionString;

    public RedisCacheProvider(string connectionString)
    {
        _connectionString = connectionString;
    }
    //interface methods implementation...
}

そしてサービス登録。

services.AddSingleton<ICacheProvider, RedisCacheProvider>();

RedisCacheProviderクラスのコンストラクタにパラメータを渡すにはどうすればよいですか? 例えばAutofacの場合。

builder.RegisterType<RedisCacheProvider>()
       .As<ICacheProvider>()
       .WithParameter("connectionString", "myPrettyLocalhost:6379");

どのように解決するのですか?

キャッシュプロバイダを手動でインスタンス化するデリゲートを提供するか、直接インスタンスを提供するかのどちらかです。

services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));

services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));

コンテナは、たとえIDisposableを実装していても、手動でインスタンス化した型を明示的に廃棄することはないことに注意してください。については ASP.NET Core のドキュメントを参照してください。 サービスの廃棄 を参照してください。