@ -1,20 +1,21 @@
using System.Collections.Generic ;
using System ;
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!)
// https://github.com/dotnet/runtime/blob/master /src/libraries/Microsoft.Extensions.Options/src/OptionsFactory.cs
// https://github.com/dotnet/runtime/blob/release/8.0-rc1 /src/libraries/Microsoft.Extensions.Options/src/OptionsFactory.cs#L9
public class AbpOptionsFactory < TOptions > : IOptionsFactory < TOptions > where TOptions : class , new ( )
{
private readonly IEnumerable < I ConfigureOptions < TOptions > > _ setups ;
private readonly IEnumerable < I PostConfigureOptions < TOptions > > _ postConfigures ;
private readonly IEnumerable < I ValidateOptions < TOptions > > ? _ validations ;
private readonly IConfigureOptions < TOptions > [ ] _ setups ;
private readonly IPostConfigureOptions < TOptions > [ ] _ postConfigures ;
private readonly IValidateOptions < TOptions > [ ] _ validations ;
public AbpOptionsFactory (
IEnumerable < IConfigureOptions < TOptions > > setups ,
IEnumerable < IPostConfigureOptions < TOptions > > postConfigures )
: this ( setups , postConfigures , validations : null )
: this ( setups , postConfigures , validations : Array . Empty < IValidateOptions < TOptions > > ( ) )
{
}
@ -22,16 +23,16 @@ public class AbpOptionsFactory<TOptions> : IOptionsFactory<TOptions> where TOpti
public AbpOptionsFactory (
IEnumerable < IConfigureOptions < TOptions > > setups ,
IEnumerable < IPostConfigureOptions < TOptions > > postConfigures ,
IEnumerable < IValidateOptions < TOptions > > ? validations )
IEnumerable < IValidateOptions < TOptions > > validations )
{
_ setups = setups ;
_ postConfigures = postConfigures ;
_ validations = validations ;
_ setups = setups as IConfigureOptions < TOptions > [ ] ? ? new List < IConfigureOptions < TOptions > > ( setups ) . ToArray ( ) ;
_ postConfigures = postConfigures as IPostConfigureOptions < TOptions > [ ] ? ? new List < IPostConfigureOptions < TOptions > > ( postConfigures ) . ToArray ( ) ;
_ validations = validations as IValidateOptions < TOptions > [ ] ? ? new List < IValidateOptions < TOptions > > ( validations ) . ToArray ( ) ;
}
public virtual TOptions Create ( string name )
{
var options = new TOptions ( ) ;
var options = CreateInstance ( name ) ;
ConfigureOptions ( name , options ) ;
PostConfigureOptions ( name , options ) ;
@ -65,21 +66,28 @@ public class AbpOptionsFactory<TOptions> : IOptionsFactory<TOptions> where TOpti
protected virtual void ValidateOptions ( string name , TOptions options )
{
if ( _ validations ! = null )
if ( _ validations . Length < = 0 )
{
var failures = new List < string > ( ) ;
foreach ( var validate in _ validations )
{
var result = validate . Validate ( name , options ) ;
if ( result . Failed )
{
failures . AddRange ( result . Failures ) ;
}
}
if ( failures . Count > 0 )
return ;
}
var failures = new List < string > ( ) ;
foreach ( var validate in _ validations )
{
var result = validate . Validate ( name , options ) ;
if ( result . Failed )
{
throw new OptionsValidationException ( name , typeof ( TOptions ) , f ailures) ;
failures . AddRange ( result . Failures ) ;
}
}
if ( failures . Count > 0 )
{
throw new OptionsValidationException ( name , typeof ( TOptions ) , failures ) ;
}
}
protected virtual TOptions CreateInstance ( string name )
{
return Activator . CreateInstance < TOptions > ( ) ;
}
}