单例类中的 ASP.NET Core DI

Kun*_*Hsu 0 c# asp.net dependency-injection asp.net-core

我有一个SvcPool类,它注册为单例服务,

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<SvcPool, SvcPool>();
}
Run Code Online (Sandbox Code Playgroud)

SvcPool会根据构造函数内部的配置初始化多个Svc ,但是Svc类构造函数需要一个ILogger。

如何将ILogger直接调用到 Svc 的构造函数?

服务中心

public Svc(int id, string host, ILogger<Svc> logger)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

SvcPool.cs

public SvcPool(IOptions<AppConfig> config, ILogger<SvcPool> logger)
{
    foreach (var svcConfig in config.SvcList)
    {
        Svc svc = new Svc(svcConfig.ID, svcConfig.Host, ???);
    }        
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*rad 5

您可以在实例化时使用ILoggerFactory和创建ILogger实例Svc

public SvcPool(IOptions<AppConfig> config, ILogger<SvcPool> logger, ILoggerFactory loggerFactory)
{
    foreach (var svcConfig in config.Value.SvcList)
    {
        Svc svc = new Svc(svcConfig.ID, svcConfig.Host, loggerFactory.CreateLogger<Svc>());
    }
}
Run Code Online (Sandbox Code Playgroud)