mirror of https://github.com/abpframework/abp.git
1 changed files with 42 additions and 0 deletions
@ -0,0 +1,42 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
|
||||
|
namespace Volo.Abp.Options |
||||
|
{ |
||||
|
//TODO: Derive from OptionsFactory when this is released: https://github.com/aspnet/Options/pull/258 (or completely remove this!)
|
||||
|
public class AbpOptionsFactory<TOptions> : IOptionsFactory<TOptions> where TOptions : class, new() |
||||
|
{ |
||||
|
private readonly IEnumerable<IConfigureOptions<TOptions>> _setups; |
||||
|
private readonly IEnumerable<IPostConfigureOptions<TOptions>> _postConfigures; |
||||
|
|
||||
|
public AbpOptionsFactory(IEnumerable<IConfigureOptions<TOptions>> setups, IEnumerable<IPostConfigureOptions<TOptions>> postConfigures) |
||||
|
{ |
||||
|
_setups = setups; |
||||
|
_postConfigures = postConfigures; |
||||
|
} |
||||
|
|
||||
|
public virtual TOptions Create(string name) |
||||
|
{ |
||||
|
var options = new TOptions(); |
||||
|
|
||||
|
foreach (var setup in _setups) |
||||
|
{ |
||||
|
if (setup is IConfigureNamedOptions<TOptions> namedSetup) |
||||
|
{ |
||||
|
namedSetup.Configure(name, options); |
||||
|
} |
||||
|
else if (name == Microsoft.Extensions.Options.Options.DefaultName) |
||||
|
{ |
||||
|
setup.Configure(options); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
foreach (var post in _postConfigures) |
||||
|
{ |
||||
|
post.PostConfigure(name, options); |
||||
|
} |
||||
|
|
||||
|
return options; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue