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(...);
}

//...