c# - 如何注册ServiceBusClient进行依赖注入(inject)?

标签 c# azure .net-core dependency-injection servicebus

我正在尝试按照此 article 中的建议从新的 Azure.Messaging.ServiceBus 包中注册 ServiceBusClient 以进行依赖项注入(inject)使用 ServiceBusClientBuilderExtensions,但我在网上找不到任何文档或任何帮助来了解具体如何进行此操作。

我正在尝试添加如下内容

public override void Configure(IFunctionsHostBuilder builder)
{
    ServiceBusClientBuilderExtensions.AddServiceBusClient(builder, Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary);
}

但我收到错误

The type 'Microsoft.Azure.Functions.Extensions.DependencyInjection.IFunctionsHostBuilder' must be convertible to 'Azure.Core.Extensions.IAzureClientFactoryBuilder' in order to use it as parameter 'TBuilder' in the generic method 'IAzureClientBuilder<ServiceBusClient,ServiceBusClientOptions> Microsoft.Extensions.Azure.ServiceBusClientBuilderExtensions.AddServiceBusClient(this TBuilder, string)'

enter image description here

如果有人能帮忙解决这个问题,那就太好了!

最佳答案

ServiceBusClientBuilderExtensions.AddServiceBusClient IAzureClientFactoryBuilder 的扩展方法:

public static IAzureClientBuilder<ServiceBusClient, ServiceBusClientOptions> AddServiceBusClient<TBuilder>(this TBuilder builder, string connectionString)
            where TBuilder : IAzureClientFactoryBuilder

获取 IAzureClientFactoryBuilder 的实例,您需要调用 AzureClientServiceCollectionExtensions.AddAzureClients(IServiceCollection, Action<AzureClientFactoryBuilder>) 对于给定的IServiceCollection ,它提供了一个委托(delegate),给出 IAzureClientFactoryBuilder 的实例。 (此方法位于 Microsoft.Extensions.Azure NuGet 包中)

要调用该方法,您可以使用 IServiceCollectionIFunctionsHostBuilder提供。有了所有这些,您所拥有的应该类似于:

public override void Configure(IFunctionsHostBuilder builder)
{
    builder.Services.AddAzureClients(clientsBuilder =>
    {
        clientsBuilder.AddServiceBusClient(Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary)
          // (Optional) Provide name for instance to retrieve by with DI
          .WithName("Client1Name")
          // (Optional) Override ServiceBusClientOptions (e.g. change retry settings)
          .ConfigureOptions(options =>
          {
              options.RetryOptions.Delay = TimeSpan.FromMilliseconds(50);
              options.RetryOptions.MaxDelay = TimeSpan.FromSeconds(5);
              options.RetryOptions.MaxRetries = 3;
          });
    });
}

要检索命名实例,而不是使用 ServiceBusClient作为您使用的注入(inject)类型 IAzureClientFactory<ServiceBusClient>ServiceBusClient无论您是否使用命名实例,都是单例。

 public Constructor(IAzureClientFactory<ServiceBusClient> serviceBusClientFactory)
 {
     // Wherever you need the ServiceBusClient
     ServiceBusClient singletonClient1 = serviceBusClientFactory.CreateClient("Client1Name")
 }

关于c# - 如何注册ServiceBusClient进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68688838/

相关文章:

.net-core - Visual Studio Code 无法构建默认的 dotnet 核心类库

c# - Page head 元素中的尖括号

c# - ASP.NET 身份,注册手动添加的用户而不删除他

azure - 使用 SSH 公钥的 HDInsight 群集如何对多个用户可见?

azure - 无法在 Azure 开放 AI 服务中列出用于矢量搜索的文本嵌入模型

c# - .net core 1.1 : Type. 来自外部程序集的 GetType 返回 null

angular - 无法将 "dotnet new angular"创建的应用程序部署到 Azure

c# - 服务将空值发布到 MySQL 数据库

带路由值的 helper 的 C# 扩展方法

azure - Azure Openshift 集群的持久卷