Browse Source

Extracted RemoteServiceConfigurationProvider.

pull/9350/head
Halil İbrahim Kalkan 5 years ago
parent
commit
e71e53e557
  1. 12
      framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs
  2. 10
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs
  3. 8
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs
  4. 14
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs
  5. 13
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs
  6. 9
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs
  7. 25
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs

12
framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs

@ -19,9 +19,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility
{ {
public IHttpClientFactory HttpClientFactory { get; } public IHttpClientFactory HttpClientFactory { get; }
public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; }
public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; }
public AbpRemoteServiceOptions RemoteServiceOptions { get; }
public ICurrentTenant CurrentTenant { get; } public ICurrentTenant CurrentTenant { get; }
public IHttpContextAccessor HttpContextAccessor { get; } public IHttpContextAccessor HttpContextAccessor { get; }
public NavigationManager NavigationManager { get; } public NavigationManager NavigationManager { get; }
@ -29,16 +27,16 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility
public BlazorServerLookupApiRequestService(IHttpClientFactory httpClientFactory, public BlazorServerLookupApiRequestService(IHttpClientFactory httpClientFactory,
IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IOptions<AbpRemoteServiceOptions> remoteServiceOptions,
IHttpContextAccessor httpContextAccessor, IHttpContextAccessor httpContextAccessor,
NavigationManager navigationManager) NavigationManager navigationManager,
IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider)
{ {
HttpClientFactory = httpClientFactory; HttpClientFactory = httpClientFactory;
HttpClientAuthenticator = httpClientAuthenticator; HttpClientAuthenticator = httpClientAuthenticator;
RemoteServiceOptions = remoteServiceOptions.Value;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
HttpContextAccessor = httpContextAccessor; HttpContextAccessor = httpContextAccessor;
NavigationManager = navigationManager; NavigationManager = navigationManager;
RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider;
} }
public async Task<string> SendAsync(string url) public async Task<string> SendAsync(string url)
@ -53,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility
try try
{ {
//Blazor tiered -- mode //Blazor tiered -- mode
var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault("Default");
baseUrl = remoteServiceConfig.BaseUrl; baseUrl = remoteServiceConfig.BaseUrl;
client.BaseAddress = new Uri(baseUrl); client.BaseAddress = new Uri(baseUrl);
AddHeaders(requestMessage); AddHeaders(requestMessage);

10
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs

@ -17,20 +17,18 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility
{ {
public IHttpClientFactory HttpClientFactory { get; } public IHttpClientFactory HttpClientFactory { get; }
public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; }
public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; }
public AbpRemoteServiceOptions RemoteServiceOptions { get; }
public ICurrentTenant CurrentTenant { get; } public ICurrentTenant CurrentTenant { get; }
public WebAssemblyLookupApiRequestService(IHttpClientFactory httpClientFactory, public WebAssemblyLookupApiRequestService(IHttpClientFactory httpClientFactory,
IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
IOptions<AbpRemoteServiceOptions> remoteServiceOptions) IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider)
{ {
HttpClientFactory = httpClientFactory; HttpClientFactory = httpClientFactory;
HttpClientAuthenticator = httpClientAuthenticator; HttpClientAuthenticator = httpClientAuthenticator;
RemoteServiceOptions = remoteServiceOptions.Value;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider;
} }
public async Task<string> SendAsync(string url) public async Task<string> SendAsync(string url)
@ -42,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility
var uri = new Uri(url, UriKind.RelativeOrAbsolute); var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri) if (!uri.IsAbsoluteUri)
{ {
var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault("Default");
client.BaseAddress = new Uri(remoteServiceConfig.BaseUrl); client.BaseAddress = new Uri(remoteServiceConfig.BaseUrl);
await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client, requestMessage, new RemoteServiceConfiguration(remoteServiceConfig.BaseUrl), string.Empty)); await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client, requestMessage, new RemoteServiceConfiguration(remoteServiceConfig.BaseUrl), string.Empty));
} }

8
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs

@ -9,17 +9,17 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly
[Dependency(ReplaceServices = true)] [Dependency(ReplaceServices = true)]
public class WebAssemblyServerUrlProvider : IServerUrlProvider, ITransientDependency public class WebAssemblyServerUrlProvider : IServerUrlProvider, ITransientDependency
{ {
public AbpRemoteServiceOptions Options { get; } protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; }
public WebAssemblyServerUrlProvider( public WebAssemblyServerUrlProvider(
IOptions<AbpRemoteServiceOptions> options) IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider)
{ {
Options = options.Value; RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider;
} }
public string GetBaseUrl(string remoteServiceName = null) public string GetBaseUrl(string remoteServiceName = null)
{ {
return Options.RemoteServices.GetConfigurationOrDefault( return RemoteServiceConfigurationProvider.GetConfigurationOrDefault(
remoteServiceName ?? RemoteServiceConfigurationDictionary.DefaultName remoteServiceName ?? RemoteServiceConfigurationDictionary.DefaultName
).BaseUrl.EnsureEndsWith('/'); ).BaseUrl.EnsureEndsWith('/');
} }

14
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs

@ -34,7 +34,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
protected AbpCorrelationIdOptions AbpCorrelationIdOptions { get; } protected AbpCorrelationIdOptions AbpCorrelationIdOptions { get; }
protected IDynamicProxyHttpClientFactory HttpClientFactory { get; } protected IDynamicProxyHttpClientFactory HttpClientFactory { get; }
protected IApiDescriptionFinder ApiDescriptionFinder { get; } protected IApiDescriptionFinder ApiDescriptionFinder { get; }
protected AbpRemoteServiceOptions AbpRemoteServiceOptions { get; } protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; }
protected AbpHttpClientOptions ClientOptions { get; } protected AbpHttpClientOptions ClientOptions { get; }
protected IJsonSerializer JsonSerializer { get; } protected IJsonSerializer JsonSerializer { get; }
protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator { get; } protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator { get; }
@ -51,25 +51,25 @@ namespace Volo.Abp.Http.Client.DynamicProxying
public DynamicHttpProxyInterceptor( public DynamicHttpProxyInterceptor(
IDynamicProxyHttpClientFactory httpClientFactory, IDynamicProxyHttpClientFactory httpClientFactory,
IOptions<AbpHttpClientOptions> clientOptions, IOptions<AbpHttpClientOptions> clientOptions,
IOptionsSnapshot<AbpRemoteServiceOptions> remoteServiceOptions,
IApiDescriptionFinder apiDescriptionFinder, IApiDescriptionFinder apiDescriptionFinder,
IJsonSerializer jsonSerializer, IJsonSerializer jsonSerializer,
IRemoteServiceHttpClientAuthenticator clientAuthenticator, IRemoteServiceHttpClientAuthenticator clientAuthenticator,
ICancellationTokenProvider cancellationTokenProvider, ICancellationTokenProvider cancellationTokenProvider,
ICorrelationIdProvider correlationIdProvider, ICorrelationIdProvider correlationIdProvider,
IOptions<AbpCorrelationIdOptions> correlationIdOptions, IOptions<AbpCorrelationIdOptions> correlationIdOptions,
ICurrentTenant currentTenant) ICurrentTenant currentTenant,
IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider)
{ {
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
CorrelationIdProvider = correlationIdProvider; CorrelationIdProvider = correlationIdProvider;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider;
AbpCorrelationIdOptions = correlationIdOptions.Value; AbpCorrelationIdOptions = correlationIdOptions.Value;
HttpClientFactory = httpClientFactory; HttpClientFactory = httpClientFactory;
ApiDescriptionFinder = apiDescriptionFinder; ApiDescriptionFinder = apiDescriptionFinder;
JsonSerializer = jsonSerializer; JsonSerializer = jsonSerializer;
ClientAuthenticator = clientAuthenticator; ClientAuthenticator = clientAuthenticator;
ClientOptions = clientOptions.Value; ClientOptions = clientOptions.Value;
AbpRemoteServiceOptions = remoteServiceOptions.Value;
Logger = NullLogger<DynamicHttpProxyInterceptor<TService>>.Instance; Logger = NullLogger<DynamicHttpProxyInterceptor<TService>>.Instance;
} }
@ -135,7 +135,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
private async Task<HttpContent> MakeRequestAsync(IAbpMethodInvocation invocation) private async Task<HttpContent> MakeRequestAsync(IAbpMethodInvocation invocation)
{ {
var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}.");
var remoteServiceConfig = AbpRemoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); var remoteServiceConfig = RemoteServiceConfigurationProvider.GetConfigurationOrDefault(clientConfig.RemoteServiceName);
var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); var client = HttpClientFactory.Create(clientConfig.RemoteServiceName);
@ -263,8 +263,8 @@ namespace Volo.Abp.Http.Client.DynamicProxying
var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService))
?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}.");
return AbpRemoteServiceOptions.RemoteServices.GetOrDefault(clientConfig.RemoteServiceName)?.Version return RemoteServiceConfigurationProvider
?? AbpRemoteServiceOptions.RemoteServices.Default?.Version; .GetConfigurationOrDefaultOrNull(clientConfig.RemoteServiceName)?.Version;
} }
private async Task ThrowExceptionForResponseAsync(HttpResponseMessage response) private async Task ThrowExceptionForResponseAsync(HttpResponseMessage response)

13
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs

@ -0,0 +1,13 @@
using JetBrains.Annotations;
namespace Volo.Abp.Http.Client
{
public interface IRemoteServiceConfigurationProvider
{
[NotNull]
RemoteServiceConfiguration GetConfigurationOrDefault(string name);
[CanBeNull]
RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name);
}
}

9
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.Http.Client namespace Volo.Abp.Http.Client
{ {
@ -12,11 +13,19 @@ namespace Volo.Abp.Http.Client
set => this[DefaultName] = value; set => this[DefaultName] = value;
} }
[NotNull]
public RemoteServiceConfiguration GetConfigurationOrDefault(string name) public RemoteServiceConfiguration GetConfigurationOrDefault(string name)
{ {
return this.GetOrDefault(name) return this.GetOrDefault(name)
?? Default ?? Default
?? throw new AbpException($"Remote service '{name}' was not found and there is no default configuration."); ?? throw new AbpException($"Remote service '{name}' was not found and there is no default configuration.");
} }
[CanBeNull]
public RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name)
{
return this.GetOrDefault(name)
?? Default;
}
} }
} }

25
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs

@ -0,0 +1,25 @@
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Http.Client
{
public class RemoteServiceConfigurationProvider : IRemoteServiceConfigurationProvider, IScopedDependency
{
protected AbpRemoteServiceOptions Options { get; }
public RemoteServiceConfigurationProvider(IOptionsSnapshot<AbpRemoteServiceOptions> options)
{
Options = options.Value;
}
public virtual RemoteServiceConfiguration GetConfigurationOrDefault(string name)
{
return Options.RemoteServices.GetConfigurationOrDefault(name);
}
public virtual RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name)
{
return Options.RemoteServices.GetConfigurationOrDefaultOrNull(name);
}
}
}
Loading…
Cancel
Save