我正在尝试按照此 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)'
如果有人能帮忙解决这个问题,那就太好了!
最佳答案
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 包中)
要调用该方法,您可以使用 IServiceCollection
由IFunctionsHostBuilder
提供。有了所有这些,您所拥有的应该类似于:
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/