Skip to content

Commit

Permalink
增加微信支付AsyncLocal配置提供器,调整提供器的注册方式
Browse files Browse the repository at this point in the history
  • Loading branch information
gdlcf88 committed Jul 18, 2020
1 parent 29617f5 commit 202ab6e
Show file tree
Hide file tree
Showing 11 changed files with 133 additions and 18 deletions.
2 changes: 1 addition & 1 deletion common.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
using Volo.Abp.Modularity;
using EasyAbp.Abp.WeChat.Common;
using EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.OptionsResolve;
using EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.OptionsResolve.Contributors;

namespace EasyAbp.Abp.WeChat.MiniProgram
{
[DependsOn(typeof(AbpWeChatCommonModule))]
public class AbpWeChatMiniProgramModule : AbpModule
{
public override void PostConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpWeChatMiniProgramResolveOptions>(options =>
{
if (!options.Contributors.Exists(x => x.Name == ConfigurationOptionsResolveContributor.ContributorName))
{
options.Contributors.Add(new ConfigurationOptionsResolveContributor());
}

if (!options.Contributors.Exists(x => x.Name == AsyncLocalOptionsResolveContributor.ContributorName))
{
options.Contributors.Insert(0, new AsyncLocalOptionsResolveContributor());
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@ namespace EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.OptionsResolve
{
public class AbpWeChatMiniProgramResolveOptions
{
[NotNull] public List<IWeChatMiniProgramOptionsResolveContributor> WeChatMiniProgramOptionsResolveContributors { get; }
public List<IWeChatMiniProgramOptionsResolveContributor> Contributors { get; }

public AbpWeChatMiniProgramResolveOptions()
{
WeChatMiniProgramOptionsResolveContributors = new List<IWeChatMiniProgramOptionsResolveContributor>
{
new ConfigurationOptionsResolveContributor()
};
Contributors = new List<IWeChatMiniProgramOptionsResolveContributor>();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.DependencyInjection;

namespace EasyAbp.Abp.WeChat.MiniProgram.Infrastructure.OptionsResolve.Contributors
{
public class AsyncLocalOptionsResolveContributor : IWeChatMiniProgramOptionsResolveContributor
{
public const string ContributorName = "AsyncLocal";

public string Name => ContributorName;

public Task ResolveAsync(WeChatMiniProgramOptionsResolveContext context)
{
var asyncLocal = context.ServiceProvider.GetRequiredService<IWeChatMiniProgramAsyncLocalAccessor>();

if (asyncLocal.Current != null)
{
context.Options = asyncLocal.Current;
}

return Task.CompletedTask;
}
}

public interface IWeChatMiniProgramAsyncLocalAccessor
{
IWeChatMiniProgramOptions Current { get; set; }
}

public class WeChatMiniProgramAsyncLocalAccessor : IWeChatMiniProgramAsyncLocalAccessor, ISingletonDependency
{
public IWeChatMiniProgramOptions Current
{
get => _asyncLocal.Value;
set => _asyncLocal.Value = value;
}

private readonly AsyncLocal<IWeChatMiniProgramOptions> _asyncLocal;

public WeChatMiniProgramAsyncLocalAccessor()
{
_asyncLocal = new AsyncLocal<IWeChatMiniProgramOptions>();
}
}

public interface IWeChatMiniProgramAsyncLocal
{
IWeChatMiniProgramOptions CurrentOptions { get; }

IDisposable Change(IWeChatMiniProgramOptions weChatMiniProgramOptions);
}

public class WeChatMiniProgramAsyncLocal : IWeChatMiniProgramAsyncLocal, ITransientDependency
{
public IWeChatMiniProgramOptions CurrentOptions { get; private set; }

private readonly IWeChatMiniProgramAsyncLocalAccessor _weChatMiniProgramAsyncLocalAccessor;

public WeChatMiniProgramAsyncLocal(IWeChatMiniProgramAsyncLocalAccessor weChatMiniProgramAsyncLocalAccessor)
{
_weChatMiniProgramAsyncLocalAccessor = weChatMiniProgramAsyncLocalAccessor;

CurrentOptions = weChatMiniProgramAsyncLocalAccessor.Current;
}

public IDisposable Change(IWeChatMiniProgramOptions weChatMiniProgramOptions)
{
var parentScope = _weChatMiniProgramAsyncLocalAccessor.Current;

_weChatMiniProgramAsyncLocalAccessor.Current = weChatMiniProgramOptions;

return new DisposeAction(() =>
{
_weChatMiniProgramAsyncLocalAccessor.Current = parentScope;
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public async Task<IWeChatMiniProgramOptions> ResolveAsync()
{
var context = new WeChatMiniProgramOptionsResolveContext(serviceScope.ServiceProvider);

foreach (var resolver in _options.WeChatMiniProgramOptionsResolveContributors)
foreach (var resolver in _options.Contributors)
{
await resolver.ResolveAsync(context);

Expand Down
14 changes: 14 additions & 0 deletions src/Pay/EasyAbp.Abp.WeChat.Pay/AbpWeChatPayModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using EasyAbp.Abp.WeChat.Pay.Infrastructure;
using EasyAbp.Abp.WeChat.Pay.Infrastructure.Handlers;
using EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve;
using EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve.Contributors;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
Expand All @@ -17,6 +18,19 @@ public class AbpWeChatPayModule : AbpModule
{
public override void PostConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpWeChatPayResolveOptions>(options =>
{
if (!options.Contributors.Exists(x => x.Name == ConfigurationOptionsResolveContributor.ContributorName))
{
options.Contributors.Add(new ConfigurationOptionsResolveContributor());
}

if (!options.Contributors.Exists(x => x.Name == AsyncLocalOptionsResolveContributor.ContributorName))
{
options.Contributors.Insert(0, new AsyncLocalOptionsResolveContributor());
}
});

context.Services.AddHttpClient("WeChatPay").ConfigurePrimaryHttpMessageHandler(builder =>
{
var handler = new HttpClientHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,11 @@ namespace EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve
{
public class AbpWeChatPayResolveOptions
{
public List<IWeChatPayOptionResolveContributor> ResolveContributors { get; }
public List<IWeChatPayOptionsResolveContributor> Contributors { get; }

public AbpWeChatPayResolveOptions()
{
ResolveContributors = new List<IWeChatPayOptionResolveContributor>
{
new ConfigurationOptionResolveContributor()
};
Contributors = new List<IWeChatPayOptionsResolveContributor>();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve.Contributors
{
public class AsyncLocalResolveContributor : IWeChatPayOptionResolveContributor
public class AsyncLocalOptionsResolveContributor : IWeChatPayOptionsResolveContributor
{
public const string ContributorName = "AsyncLocal";

Expand All @@ -16,7 +16,11 @@ public class AsyncLocalResolveContributor : IWeChatPayOptionResolveContributor
public Task ResolveAsync(WeChatPayOptionsResolverContext context)
{
var asyncLocal = context.ServiceProvider.GetRequiredService<IWeChatPayAsyncLocalAccessor>();
context.Options = asyncLocal.Current;

if (asyncLocal.Current != null)
{
context.Options = asyncLocal.Current;
}

return Task.CompletedTask;
}
Expand Down Expand Up @@ -50,7 +54,7 @@ public interface IWeChatPayAsyncLocal
IDisposable Change(IWeChatPayOptions weChatPayOptions);
}

public class WeChatPayAsyncLocal : IWeChatPayAsyncLocal
public class WeChatPayAsyncLocal : IWeChatPayAsyncLocal, ITransientDependency
{
public IWeChatPayOptions CurrentOptions { get; }

Expand All @@ -59,12 +63,16 @@ public class WeChatPayAsyncLocal : IWeChatPayAsyncLocal
public WeChatPayAsyncLocal(IWeChatPayAsyncLocalAccessor weChatPayAsyncLocalAccessor)
{
_weChatPayAsyncLocalAccessor = weChatPayAsyncLocalAccessor;

CurrentOptions = weChatPayAsyncLocalAccessor.Current;
}

public IDisposable Change(IWeChatPayOptions weChatPayOptions)
{
var parentScope = _weChatPayAsyncLocalAccessor.Current;

_weChatPayAsyncLocalAccessor.Current = weChatPayOptions;

return new DisposeAction(() =>
{
_weChatPayAsyncLocalAccessor.Current = parentScope;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve.Contributors
{
public class ConfigurationOptionResolveContributor : IWeChatPayOptionResolveContributor
public class ConfigurationOptionsResolveContributor : IWeChatPayOptionsResolveContributor
{
public const string ContributorName = "Configuration";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace EasyAbp.Abp.WeChat.Pay.Infrastructure.OptionResolve
{
public interface IWeChatPayOptionResolveContributor
public interface IWeChatPayOptionsResolveContributor
{
string Name { get; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public async Task<IWeChatPayOptions> ResolveAsync()
{
var context = new WeChatPayOptionsResolverContext(serviceScope.ServiceProvider);

foreach (var resolver in _options.ResolveContributors)
foreach (var resolver in _options.Contributors)
{
await resolver.ResolveAsync(context);

Expand Down

0 comments on commit 202ab6e

Please sign in to comment.