web-dev-qa-db-ja.com

依存性注入、パラメーターを使用した注入

DIのvNext実装を使用しています。コンストラクタにパラメータを渡す方法は?たとえば、私はクラスを持っています:

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");
29

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

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

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

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

67
Pinpoint