Comments (6)
You're saying there's nothing wrong with the way I'm currently doing it though (i.e. with builder.AddClient<ServiceBusClient, ServiceBusClientOptions>)?
Correct. There's nothing wrong with what you're currently doing, and it seems like the best approach for your specific scenario of not knowing the configuration that you want upfront. What you're doing will register the client and ensure proper cleanup.
from azure-sdk-for-net.
Thank you for your feedback. Tagging and routing to the team member best able to assist.
from azure-sdk-for-net.
Hi @cjablonski76. You are correct in that there is no overload that injects an IServiceProvider
and the factory approach that you're using is the recommended way to do so. The resulting factory is invoked on-demand and the resulting client instance is cached and cleaned up.
If your goal is to provide configuration to the client or overload its options, there are other more direct ways to do so.
For example, to create a client based on configuration, the recommended approach is:
var appBuilder = WebApplication.CreateBuilder(args);
var serviceCollection = appBuilder.Services;
serviceCollection.AddAzureClients(builder =>
{
builder.AddServiceBusClient(appBuilder.Configuration.GetSection("ServiceBus");
}
Overriding client options can be done in the following way, if you'd like to avoid the factory:
var appBuilder = WebApplication.CreateBuilder(args);
var serviceCollection = appBuilder.Services;
serviceCollection.AddAzureClients(builder =>
{
builder
.AddServiceBusClientWithNamespace("<your_namespace>.servicebus.windows.net");
.ConfigureOptions(options =>
{
var myOptions = new MyOptions();
appBuilder.Configuration["MyOptions"].Bind(myOptions);
options.TransportType = myOptions.ServiceBusTransportType;
});
}
More discussion and examples can be found in Dependency injection with the Azure SDK for .NET.
from azure-sdk-for-net.
Hi @cjablonski76. Thank you for opening this issue and giving us the opportunity to assist. We believe that this has been addressed. If you feel that further discussion is needed, please add a comment with the text "/unresolve" to remove the "issue-addressed" label and continue the conversation.
from azure-sdk-for-net.
@jsquire, the more in depth problem I have is that the configuration I'm trying to load has two possible service bus connections configured. So something like:
{
"PrimaryConnection" : {
"Namespace": "testing-primary-centralus.servicebus.windows.net"
},
"FailoverConnection": {
"Namespace": "testing-failover-centralus.servicebus.windows.net"
}
}
And deciding which service bus connection to use depends on some other DI dependency, so I end up doing something like:
serviceCollection
.AddOptions<ServiceBusOptions>()
.Configure<IConnectionPicker>((serviceBusOptions, connPicker) =>
{
var connectionToUse = connPicker.GetConnectionNameBasedOnPodLocation(); // return "Primary" or "Secondary"
configurationSection.GetSection(connectionToUse).Bind(serviceBusOptions);
});
serviceCollection.AddAzureClients(builder =>
{
builder.AddClient<ServiceBusClient, ServiceBusClientOptions>((options, provider) =>
{
var serviceBusOptions =
provider.GetRequiredService<IOptions<ServiceBusOptions>>().Value;
return new ServiceBusClient(serviceBusOptions.Namespace, new DefaultAzureCredential(), options);
}
}
So it would have been convenient if to have access to the IServiceProvider
in some AddServiceBus*
methods so that I could stick to those methods without re-designing my above flow.
I think to accomplish what I'm talking about while using the AddServiceBus*
methods, I would need to register both ServiceBusClient
instances and name them appropriately, then I would push my IConnectionPicker
down into the class that depends on ServiceBusClient
and grab the correct instance with IAzureClientFactory<ServiceBusClient>.CreateClient(connPicker.GetConnectionNameBasedOnPodLocation());
You're saying there's nothing wrong with the way I'm currently doing it though (i.e. with builder.AddClient<ServiceBusClient, ServiceBusClientOptions>
)?
from azure-sdk-for-net.
Awesome, thanks for the help!
from azure-sdk-for-net.
Related Issues (20)
- Insufficient documentation on this API HOT 1
- Microsoft Azure.WebJobs.Extensions.Durable Task: Could not load type 'Microsoft.Azure.WebJobs.Host.Scale.ITargetScalerProvider' from assembly 'Microsoft.Azure.WebJobs.Host, Version=3.0.34.0 HOT 2
- SetApiVersion doesn't support change the API version for all operations
- [BUG] Azure Blob Storage Client SDK No Longer Supports Globalization Invariant Mode for Account Key Authentication HOT 6
- In the Azure .Net SDK , VectorQuery.KNearestNeighborsCount it seems that this parameter controls the total number of results from the Vector Search returned[QUERY] HOT 2
- [BUG] Azure Service Bus "Unable to cast object of type 'Microsoft.Azure.Amqp.Framing.Accepted'" HOT 3
- Reopen this bug. HOT 1
- [QUERY] When will a new release of Azure.AI.OpenAI occur? HOT 1
- [BUG] Azure.Identity tries to load Azure.Core 1.40 despite having Azure.Core (>= 1.40) listed HOT 5
- Azure.AI.OpenAI ClientOptions doesn't work well with ASP.NET Core and Microsoft.Extensions HOT 4
- [QUERY] How can I exclude table content from Paragraphs in PDF analysis to prevent duplication? HOT 4
- Set cloud role name in App Insights using Open Telemetry[QUERY] HOT 4
- [BUG] Cannot connect to Blob Container after Update to new sdk version (InvalidOperationException) HOT 2
- Mapping custom NER model labels to CategorizedEntity.Category HOT 1
- [FEATURE REQ] Allow defining export interval on PeriodicExportingMetricReader when using AddAzureMonitorMetricExporter extension HOT 2
- MediaJobErrorCategory needs to be an enum
- [FEATURE REQ] Set, or support setting, App Insights session ID and user ID via otel exporter HOT 3
- [MPG] Operation Id should use the original name in TSP instead of the name from client TSP
- AzureKeyCredential HOT 3
- //Get the Collator for US English and set its strength to PRIMARY Collator usCollator = Collator.ec HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from azure-sdk-for-net.