如何解决为什么MassTransit的ServiceCollectionBusConfigurator没有通过AddConsumer将IConsumer添加到DI中?
我正在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。恕我直言,如果相似的抽象使用相同的方法签名,它们的行为应该相似,不是吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。