问题描述
我正在Blazor Server
.NET 5
项目上工作,该项目使用了不错的Masstransit
7.0.5-develop2976
框架(顺便感谢Chris!)。
我很好奇为什么Masstransit
时ServiceCollectionBusConfigurator
.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。恕我直言,如果相似的抽象使用相同的方法签名,它们的行为应该相似,不是吗?