Azure SDK for .Net - 两个订阅的依赖注入
Azure SDK for .Net - dependency injection for two subscriptions
我有以下代码将实例注册到 Azure 服务的 .net 服务集合。
services.AddSingleton(x => Microsoft.Azure.Management.Fluent.Azure.Authenticate(azureCredentials)
.WithSubscription(Configuration[ConfigurationConstants.AzureAuth_SubscriptionId]));
此代码然后在我的服务 class 中解析 IAzure
的一个实例,我可以在其中访问所有可用的服务,例如 _azure.SqlServers.ListAsync
等
我想要一种方法,以便我可以使用两个 Azure 订阅,从而将两个实例注册到服务集合,然后能够解析我想要的那个。您可以查看 here 以获取我想要的类似示例,不过它是关于 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(...);
}
//...
我有以下代码将实例注册到 Azure 服务的 .net 服务集合。
services.AddSingleton(x => Microsoft.Azure.Management.Fluent.Azure.Authenticate(azureCredentials)
.WithSubscription(Configuration[ConfigurationConstants.AzureAuth_SubscriptionId]));
此代码然后在我的服务 class 中解析 IAzure
的一个实例,我可以在其中访问所有可用的服务,例如 _azure.SqlServers.ListAsync
等
我想要一种方法,以便我可以使用两个 Azure 订阅,从而将两个实例注册到服务集合,然后能够解析我想要的那个。您可以查看 here 以获取我想要的类似示例,不过它是关于 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(...);
}
//...