.net-core - Azure SDK for .Net - 两个订阅的依赖注入
问题描述
我有以下代码将实例注册到 Azure 服务的 .net 服务集合。
services.AddSingleton(x => Microsoft.Azure.Management.Fluent.Azure.Authenticate(azureCredentials)
.WithSubscription(Configuration[ConfigurationConstants.AzureAuth_SubscriptionId]));
然后,此代码解析我的服务类中的一个实例,IAzure
我可以在其中访问所有可用的服务,例如_azure.SqlServers.ListAsync
等。
我想要一种方法,以便我可以使用两个 Azure 订阅,从而将两个实例注册到服务集合,然后能够解决我想要的一个。您可以在此处查看我想要的类似示例,不过它是关于 blob 存储的。
解决方案
与链接的示例一样,您需要一种方法来唯一区分服务,并且很可能需要使用工厂模式设计
public interface IAzureFactory {
IAzure GetSubscription(string subscriptionId);
}
订阅 ID 可用于分隔服务,但这需要从服务中获取当前订阅 ID 才能找到匹配项
public class AzureFactory : IAzureFactory {
private readonly IEnumerable<IAzure> subs;
public AzureFactory (IEnumerable<IAzure> subs) {
this.subs = subs;
}
public IAzure GetSubscription(string subscriptionId) {
return subs.FirstOrDefault(_ => _.SubscriptionId == subscriptionId) ??
throw new InvalidArgumentException("invalid subscription Id)";
}
}
从那里只需注册不同的订阅即可。
services.AddSingleton<IAzureFactory, AzureFactory>();
services
.AddSingleton(x => Microsoft.Azure.Management.Fluent.Azure.Authenticate(azureCredentials)
.WithSubscription(Configuration[ConfigurationConstants.AzureAuth_SubscriptionId1]));
services
.AddSingleton(x => Microsoft.Azure.Management.Fluent.Azure.Authenticate(azureCredentials)
.WithSubscription(Configuration[ConfigurationConstants.AzureAuth_SubscriptionId2]));
并使用工厂获得所需的订阅
//...
private readonly IAzure azure;
//ctor
public MyService(IAzureFactory factory) {
azure = factory.GetSubscription(...);
}
//...
推荐阅读
- python-3.x - 在日期之间选择熊猫数据框中的行,无论年份如何
- reactjs - 添加设置状态更改会导致 React 中的无限循环
- java - JniExport 因声明字符串而失败
- java - 在 Quarkus 中创建托管 bean 在构建时失败,但在手动创建时成功
- typescript - 类型安全的深度对象属性访问
- javascript - ::after css元素上的vue @click函数-关闭btn
- dynamic - 为什么在 rust 中使用动态错误而不是枚举很常见?使用编译时变体是否不好/不可能?
- javascript - 赛普拉斯框架管理
- python - 如何按值对 dic 进行排序并打印
- python - 如何使用 django 进行分组