为什么MassTransit的ServiceCollectionBusConfigurator没有通过AddConsumer将IConsumer添加到DI中?

问题描述

我正在Blazor Server .NET 5项目上工作,该项目使用了不错的Masstransit 7.0.5-develop2976框架(顺便感谢Chris!)。

我很好奇为什么MasstransitServiceCollectionBusConfigurator .AddConsumer<T>()不将消费者添加到DI 。结果,我收到如下所示的“ 无法解析消费者类型... ”异常。请参阅下面的解决方法

例如,如果我通过它添加我的ServiceCollectionMediatorConfigurator类型,类似的IConsumer<>也会这样做。

Masstransit试图解决我的使用者时出现的异常示例(在我的情况下,它发生在定期计划作业被触发时,但这并不重要)。

Masstransit.ConsumerException: Unable to resolve consumer type 'SomeMyConsumer'.
         at Masstransit.ExtensionsDependencyInjectionIntegration.ScopeProviders.DependencyInjectionConsumerScopeProvider.Masstransit.scoping.IConsumerScopeProvider.GetScope[TConsumer,T](ConsumeContext`1 context)
         at Masstransit.scoping.ScopeConsumerFactory`1.Send[TMessage](ConsumeContext`1 context,IPipe`1 next)
         at Masstransit.Pipeline.Filters.ConsumerMessageFilter`2.GreenPipes.IFilter<Masstransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context,IPipe`1 next) 

问题:从体系结构的角度来看,这种行为是什么原因?我有什么遗漏吗?

解决方法

作为解决方法,如果您像下面的示例一样将消费者明确添加到IServiceCollection,该错误就会消失:

services.AddScoped<SomeMyConsumer>();

...或者甚至也可以通过ServiceCollectionMediatorConfigurator注册同一使用者:

services.AddMediator(configurator =>
{
    configurator.AddConsumer<SomeMyConsumer>();
});

P.S。恕我直言,如果相似的抽象使用相同的方法签名,它们的行为应该相似,不是吗?