I am looking for a code sample for configuring Azure.Storage.Queues in an ASP.Net web app (using .Net Core 5) so that the QueueClient is injected via DI into my service class. Can anyone help point me in the right direction please?
In Configure Services in Startup:
services.AddAzureClients(builder =>
{
// Use the environment credential by default
builder.UseCredential(new DefaultAzureCredential());
builder.AddQueueServiceClient(Configuration.GetSection("StorageConnectionString"))
.ConfigureOptions(c => c.MessageEncoding = Azure.Storage.Queues.QueueMessageEncoding.Base64);
});
The implementation in the class is:
public class AzureQueueService : IQueueService
{
private readonly QueueServiceClient _queueServiceClient;
public AzureQueueService(QueueServiceClient queueServiceClient)
{
this._queueServiceClient = queueServiceClient;
}
public void SendMessageToQueue(MyMessage message)
{
this._queueServiceClient.GetQueueClient("my-queue-name")
.SendMessage(JsonSerializer.Serialize(message, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }));
}
}
an interface can be created with function/property which will return queue client and then implement the interface to inject in DI, hope below code will help.
public interface IQueueService
{
QueueClient GetQueueClient();
}
public class AzureQueueService : IQueueService
{
string azureStorageAccountConnectionString;
string queueName;
QueueClient queueClientInstance;
public AzureQueueService(IConfiguration configuration)
{
azureStorageAccountConnectionString = configuration[Constants.KEY_AZURE_STORAGE_ACCOUNT_CONNECTION_STRING];
queueName = configuration[Constants.KEY_QUEUE_NAME];
queueClientInstance = new QueueClient(azureStorageAccountConnectionString, queueName);
}
public QueueClient GetQueueClient()
{
return queueClientInstance ;
}
}
Now you can inject AzureQueueService in dependency injection