mirror of https://github.com/abpframework/abp.git
committed by
GitHub
20 changed files with 214 additions and 58 deletions
@ -0,0 +1,19 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection.Extensions; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.Options; |
||||
|
|
||||
|
namespace Microsoft.Extensions.DependencyInjection |
||||
|
{ |
||||
|
public static class ServiceCollectionDynamicOptionsManagerExtensions |
||||
|
{ |
||||
|
public static IServiceCollection AddAbpDynamicOptions<TOptions, TManager>(this IServiceCollection services) |
||||
|
where TOptions : class |
||||
|
where TManager : AbpDynamicOptionsManager<TOptions> |
||||
|
{ |
||||
|
services.Replace(ServiceDescriptor.Scoped(typeof(IOptions<TOptions>), typeof(TManager))); |
||||
|
services.Replace(ServiceDescriptor.Scoped(typeof(IOptionsSnapshot<TOptions>), typeof(TManager))); |
||||
|
|
||||
|
return services; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,32 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Options; |
||||
|
|
||||
|
namespace Microsoft.Extensions.Options |
||||
|
{ |
||||
|
public static class OptionsAbpDynamicOptionsManagerExtensions |
||||
|
{ |
||||
|
public static Task SetAsync<T>(this IOptions<T> options) |
||||
|
where T : class |
||||
|
{ |
||||
|
return options.ToDynamicOptions().SetAsync(); |
||||
|
} |
||||
|
|
||||
|
public static Task SetAsync<T>(this IOptions<T> options, string name) |
||||
|
where T : class |
||||
|
{ |
||||
|
return options.ToDynamicOptions().SetAsync(name); |
||||
|
} |
||||
|
|
||||
|
private static AbpDynamicOptionsManager<T> ToDynamicOptions<T>(this IOptions<T> options) |
||||
|
where T : class |
||||
|
{ |
||||
|
if (options is AbpDynamicOptionsManager<T> dynamicOptionsManager) |
||||
|
{ |
||||
|
return dynamicOptionsManager; |
||||
|
} |
||||
|
|
||||
|
throw new AbpException($"Options must be derived from the {typeof(AbpDynamicOptionsManager<>).FullName}!"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
|
||||
|
namespace Volo.Abp.Options |
||||
|
{ |
||||
|
public abstract class AbpDynamicOptionsManager<T> : OptionsManager<T> |
||||
|
where T : class |
||||
|
{ |
||||
|
protected AbpDynamicOptionsManager(IOptionsFactory<T> factory) |
||||
|
: base(factory) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public Task SetAsync() => SetAsync(Microsoft.Extensions.Options.Options.DefaultName); |
||||
|
|
||||
|
public virtual Task SetAsync(string name) |
||||
|
{ |
||||
|
return OverrideOptionsAsync(base.Get(name)); |
||||
|
} |
||||
|
|
||||
|
protected abstract Task OverrideOptionsAsync(T options); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue