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