为什么 MassTransit `ServiceCollectionBusConfigurator` 不通过 `AddConsumer` 将 `IConsumer` 添加到 `DI`?
Why MassTransit `ServiceCollectionBusConfigurator` doesn't add `IConsumer` to `DI` by `AddConsumer`?
我正在开发 Blazor Server
.NET 5
项目,它使用了一个很好的 MassTransit
7.0.5-develop2976
框架(顺便感谢 Chris!)。
我很好奇为什么我 .AddConsumer<T>()
MassTransit
ServiceCollectionBusConfigurator
没有将消费者添加到 DI。结果,我收到如下所示的“无法解析消费者类型...”异常。请参阅下面的解决方法。
例如,如果我通过它添加我的 IConsumer<>
类型,类似 ServiceCollectionMediatorConfigurator
就会执行此操作。
我在 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。恕我直言,如果相似的抽象使用相同的方法签名,它们的行为应该相似,不是吗?
我正在开发 Blazor Server
.NET 5
项目,它使用了一个很好的 MassTransit
7.0.5-develop2976
框架(顺便感谢 Chris!)。
我很好奇为什么我 .AddConsumer<T>()
MassTransit
ServiceCollectionBusConfigurator
没有将消费者添加到 DI。结果,我收到如下所示的“无法解析消费者类型...”异常。请参阅下面的解决方法。
例如,如果我通过它添加我的 IConsumer<>
类型,类似 ServiceCollectionMediatorConfigurator
就会执行此操作。
我在 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。恕我直言,如果相似的抽象使用相同的方法签名,它们的行为应该相似,不是吗?