gpt4 book ai didi

c# - Azure 队列客户端依赖项注入(inject)

转载 作者:行者123 更新时间:2023-12-02 23:10:22 24 4
gpt4 key购买 nike

我有一个使用 MVC Web API 开发的 Azure 应用程序,它使用 Ninject 作为依赖项注入(inject)框架,这里有许多队列用于与负责后台处理的其他工作角色进行通信。

为了能够进行单元测试,我决定使用名为 QueueClientWrapper 的类包装 QueueClient,并使用名为 IQueueClientWrapper 的接口(interface)

类和接口(interface)如下所示,

public interface IQueueClientWrapper
{
void Send<T>(T message);
}

public class QueueClientWrapper : IQueueClientWrapper
{
private QueueClient _queueClient;

public QueueClientWrapper(QueueClient queueClient)
{
_queueClient = queueClient;
}

public void Send<T>(T message)
{
_queueClient.Send(new BrokeredMessage(message));
}
}

但是这种方法的局限性是我需要将 QueueClient 传递到构造函数中,而这对于 Ninject 来说是不可能的。

所以我正在考虑改变界面,例如,

public interface IQueueClientWrapper
{
void Send<T>(string connectionString,string queueName,T message);
}

这样我就可以使用 Ninject 注入(inject) QueueClientWrapper 而无需传递构造函数参数,

我现在遇到的问题是,通常不建议创建多个队列客户端对象,我们必须重复使用相同的实例。那么解决这个问题的最佳方法是什么(我想过使用静态哈希表并用于存储队列名称、队列客户端对,但我对这种方法也不是很满意)?

最佳答案

处理依赖注入(inject)和 Azure 队列

这个问题是 2014 年的,但这是 2022 年的答案

您将需要这 2 个官方 Azure 扩展:

  1. Azure.Storage.Queues(包含队列服务)
  2. Microsoft.Extensions.Azure(包含 Startup.cs 的帮助程序)

将此行添加到 Configure 方法中的 Startup.cs 中:

builder.Services.AddAzureClients(builder =>
{
builder.AddQueueServiceClient(configuration.GetValue<string>("AzureWebJobsStorage"));

});

以及您想要服务的构造函数:

public QueueHandlingService(QueueServiceClient queueClient)
{
_queueClient = queueClient;
//Or _queueClient = queueClient.GetQueueClient("myqueue-items");
}

以下是以下文档:

AddAzureClients

AddQueueServiceClient

关于c# - Azure 队列客户端依赖项注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com