多次调用 AddHostedServices 不会创建多个实例

Calling AddHostedServices multiple times doesn't create multiple instances

(在同事的帮助下)。

基本上,我试图创建一个 class 的两个实例作为托管服务,每个实例都有不同的参数。

然而,似乎虽然有两次调用 AddHostedService,但实际上只有一个实例被实例化。

这是怎么回事?

这是此处记录的故意行为:https://github.com/dotnet/runtime/issues/38751

正如您在 source 中看到的那样,托管服务将通过调用 TryAddEnumerable 注册为单例。

public static IServiceCollection AddHostedService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THostedService>(this IServiceCollection services)
    where THostedService : class, IHostedService
{
    services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, THostedService>());

    return services;
}

TryAddEnumerable 方法将迭代所有当前服务并比较 ServiceType 和实现者类型。如果判断注册已经存在,则不会再添加注册。