Пример #1
0
    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);
    }
Пример #2
0
    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);
    }