c# - 作用域依赖作为瞬态注入到 MassTransit Consumer
问题描述
我正在使用 Azure Functions v3、MassTransit 和 Azure 服务总线。一旦 Azure Function 从服务总线读取消息,MyConsumer
就会调用它。我注意到我的作用域依赖项Foo
没有正确注入到 Azure Function 和Myconsumer
- 而不是同一个实例被注入到 Azure Function 和MyConsumer
中,它们每个都得到一个单独的实例。Azure Function 有没有办法MyConsumer
同时注入相同的作用域依赖项?我错过了什么吗?
Azure 函数启动.cs
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddScoped<Foo>();
builder.Services.AddMassTransitForAzureFunctions(cfg =>
{
cfg.AddConsumersFromNamespaceContaining<MyConsumer>();
});
}
我想作为作用域依赖注入的类。
public class Foo
{
// Just a way for me to test which instance is injected.
public int MyProperty { get; set; } = new Random().Next();
}
功能
class MyAzureFunction
{
private readonly Foo foo;
private readonly IMessageReceiver receiver;
public MyAzureFunction(IMessageReceiver receiver, Foo foo)
{
this.foo = foo;
}
[FunctionName("MyAzureFunction")]
public async Task Run(
[ServiceBusTrigger("topic-name", "subscription-name", Connection = "AzureWebJobsServiceBus")] Message message)
{
await receiver.HandleConsumer<MyConsumer>("topic-name", "subscription-name", message, default(CancellationToken));
// foo.MyProperty is 3456411
}
}
消费者
public class MyConsumer : IConsumer<IMyEvent>
{
private readonly Foo foo;
public MyConsumer(Foo foo)
{
this.foo = foo;
}
public async Task Consume(ConsumeContext<IMyEvent> context)
{
// foo.MyProperty is 78961248, indicating a different instance has been injected.
}
}
解决方案
推荐阅读
- android - 如何将抽象与 ViewBinding 与基本活动一起使用?
- elasticsearch - Elastic Search 同义词 - 删除操作
- r - 根据 R 中的另一个分组从分组变量中选择样本
- python - 如何在逐行移动时在python中使用apply函数
- javascript - PDF.js 在 ios 中显示空白页
- react-native - React-native 和 ASP.Net 核心 RestfulAPI 之间的通信
- java - 如何在不使用 getter 和 setter 的情况下显示另一个类的变量?
- python - python清除unittest.mock完整历史
- c++ - 在 OpenGL 中使用 Qt3D 离屏渲染纹理
- cdn - 在 CloudFlare 中仅存储图像和视频