1. ホーム
  2. c#

[解決済み] .NET Core DI、コンストラクタにパラメータを渡す方法

2022-04-16 08:46:03

質問

以下のサービスコンストラクタを持つ

public class Service : IService
{
     public Service(IOtherService service1, IAnotherOne service2, string arg)
     {    
     }
}

.NET CoreのIOC機構を利用したパラメータ渡しの選択肢は?

services.AddSingleton<IOtherService , OtherService>();
services.AddSingleton<IAnotherOne , AnotherOne>();
services.AddSingleton<IService>(x =>
    new Service(
        services.BuildServiceProvider().GetService<IOtherService>(),
        services.BuildServiceProvider().GetService<IAnotherOne >(),
        ""));

他に方法はありますか?

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

式パラメータ( x この例では、ファクトリーデリゲートの IServiceProvider .

これを利用して、依存関係を解決します。

_serviceCollection.AddSingleton<IService>(x => 
    new Service(x.GetRequiredService<IOtherService>(),
                x.GetRequiredService<IAnotherOne>(), 
                ""));

ファクトリーのデリゲートは、遅延呼び出しです。型が解決されるときはいつでも、完了したプロバイダをデリゲートパラメータとして渡します。