public static async Task <IServiceCollection> ConfigureBankService(this IServiceCollection service, ApplicationOption option) { service.VerifyNotNull(nameof(service)); ApplicationOption applicationOption = await DirectoryClient.Run <ApplicationOption>(option.DirectoryUrl, option.DirectoryApiKey, async client => { ServiceRecord serviceRecord = await client.GetServiceRecord(option.RunEnvironment, "Bank"); ServiceRecord artifactRecord = await client.GetServiceRecord(option.RunEnvironment, "Artifact"); option = option with { HostUrl = serviceRecord.HostUrl, ApiKey = serviceRecord.ApiKey, ArtifactUrl = artifactRecord.HostUrl, ArtifactApiKey = artifactRecord.ApiKey, }; return(option.Verify()); }); service.AddSingleton(applicationOption); service.AddSingleton <BankAccountService>(); service.AddSingleton <BankTransactionService>(); service.AddHttpClient <ArtifactClient>((service, httpClient) => { ApplicationOption option = service.GetRequiredService <ApplicationOption>(); httpClient.BaseAddress = new Uri(option.ArtifactUrl); httpClient.DefaultRequestHeaders.Add(Constants.ApiKeyName, option.ArtifactApiKey); }); return(service); }
public static async Task <IServiceCollection> ConfigureArtifactService(this IServiceCollection service, ApplicationOption option) { service.VerifyNotNull(nameof(service)); ApplicationOption applicationOption = await DirectoryClient.Run <ApplicationOption>(option.DirectoryUrl, option.DirectoryApiKey, async client => { ServiceRecord serviceRecord = await client.GetServiceRecord(option.RunEnvironment, "Artifact"); IReadOnlyList <StorageRecord> storageRecords = await client.GetStorageRecord(option.RunEnvironment, "Artifact"); return(option with { HostUrl = serviceRecord.HostUrl, ApiKey = serviceRecord.ApiKey, Storage = storageRecords, }); }); service.AddSingleton <IDocumentPackage, DocumentPackage>(); service.AddSingleton(applicationOption); service.AddSingleton <DocumentPackageFactory>(service => { ApplicationOption option = service.GetRequiredService <ApplicationOption>(); ILoggerFactory loggerFactory = service.GetRequiredService <ILoggerFactory>(); var list = option.Storage .Select(x => (Container: x.Container, Option: new DatalakeStoreOption { AccountName = x.AccountName, ContainerName = x.ContainerName, AccountKey = x.AccountKey, BasePath = x.BasePath })); return(new DocumentPackageFactory(list, loggerFactory)); }); return(service); }