使用 .NET 微软依赖注入获取类型实现者

问题描述 投票:0回答:1

我有一个情况,我需要在容器中注册类型实现者才能在BackgroundService中使用它们。

public abstract class ServiceRunner
{
    public abstract Task RunAsync(CancellationToken token);
}

public class ServiceRunner<TService> : ServiceRunner
    where TService : IService
{

    ServiceRunner(/*ctor parameters*/)
    {
        ...
    }

    //class logic implementation

    public override async Task RunAsync(CancellationToken token)
    {
        ...
    }            
 }

所以我想获取 ServiceRunner 实现者,在容器中注册以在 BackgroundService 工作线程中运行它们。

public class Worker : BackgroundService
{
    private readonly IServiceProvider _serviceProvider;

    public ScpWorker(IServiceProvider provider)
    {
        _serviceProvider = provider;
    }

    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var services = _serviceProvider.GetServiceImplementors<ServiceRunner>(); //Have no idea how to implement this method

        var tasks = services.Select(s => s.RunAsync(stoppingToken));

        return Task.WhenAll(tasks);
    }
}

关于如何实现这一目标有什么想法吗?

预先感谢您的帮助。

.net dependency-injection backgroundworker
1个回答
0
投票

从我的角度来看,你可以获取容器中的所有对象

var allServiceRunners = _serviceProvider.GetServices<YourType>();

这样你就可以使用它们了

© www.soinside.com 2019 - 2024. All rights reserved.