3
3
namespace Asp . Versioning . ApiExplorer ;
4
4
5
5
using Microsoft . Extensions . Options ;
6
- using Option = Microsoft . Extensions . Options . Options ;
7
6
8
7
/// <summary>
9
8
/// Represents a factory to create API explorer options.
10
9
/// </summary>
11
10
/// <typeparam name="T">The type of options to create.</typeparam>
12
11
[ CLSCompliant ( false ) ]
13
- public class ApiExplorerOptionsFactory < T > : IOptionsFactory < T > where T : ApiExplorerOptions , new ( )
12
+ public class ApiExplorerOptionsFactory < T > : OptionsFactory < T > where T : ApiExplorerOptions
14
13
{
15
14
private readonly IOptions < ApiVersioningOptions > optionsHolder ;
16
15
@@ -27,60 +26,42 @@ public ApiExplorerOptionsFactory(
27
26
IOptions < ApiVersioningOptions > options ,
28
27
IEnumerable < IConfigureOptions < T > > setups ,
29
28
IEnumerable < IPostConfigureOptions < T > > postConfigures )
30
- {
31
- optionsHolder = options ;
32
- Setups = setups ;
33
- PostConfigures = postConfigures ;
34
- }
29
+ : base ( setups , postConfigures ) => optionsHolder = options ;
35
30
36
31
/// <summary>
37
- /// Gets the API versioning options associated with the factory.
38
- /// </summary>
39
- /// <value>The <see cref="ApiVersioningOptions">API versioning options</see> used to create API explorer options.</value>
40
- protected ApiVersioningOptions Options => optionsHolder . Value ;
41
-
42
- /// <summary>
43
- /// Gets the associated configuration actions to run.
32
+ /// Initializes a new instance of the <see cref="ApiExplorerOptionsFactory{T}"/> class.
44
33
/// </summary>
45
- /// <value>The <see cref="IEnumerable{T}">sequence</see> of
46
- /// <see cref="IConfigureOptions{TOptions}">configuration actions</see> to run.</value>
47
- protected IEnumerable < IConfigureOptions < T > > Setups { get ; }
34
+ /// <param name="options">The <see cref="ApiVersioningOptions">API versioning options</see>
35
+ /// used to create API explorer options.</param>
36
+ /// <param name="setups">The <see cref="IEnumerable{T}">sequence</see> of
37
+ /// <see cref="IConfigureOptions{TOptions}">configuration actions</see> to run.</param>
38
+ /// <param name="postConfigures">The <see cref="IEnumerable{T}">sequence</see> of
39
+ /// <see cref="IPostConfigureOptions{TOptions}">initialization actions</see> to run.</param>
40
+ /// <param name="validations">The <see cref="IEnumerable{T}">sequence</see> of
41
+ /// <see cref="IValidateOptions{TOptions}">validations</see> to run.</param>
42
+ public ApiExplorerOptionsFactory (
43
+ IOptions < ApiVersioningOptions > options ,
44
+ IEnumerable < IConfigureOptions < T > > setups ,
45
+ IEnumerable < IPostConfigureOptions < T > > postConfigures ,
46
+ IEnumerable < IValidateOptions < T > > validations )
47
+ : base ( setups , postConfigures , validations ) => optionsHolder = options ;
48
48
49
49
/// <summary>
50
- /// Gets the associated initialization actions to run .
50
+ /// Gets the API versioning options associated with the factory .
51
51
/// </summary>
52
- /// <value>The <see cref="IEnumerable{T}">sequence</see> of
53
- /// <see cref="IPostConfigureOptions{TOptions}">initialization actions</see> to run.</value>
54
- protected IEnumerable < IPostConfigureOptions < T > > PostConfigures { get ; }
52
+ /// <value>The <see cref="ApiVersioningOptions">API versioning options</see> used to create API explorer options.</value>
53
+ protected ApiVersioningOptions Options => optionsHolder . Value ;
55
54
56
55
/// <inheritdoc />
57
- public virtual T Create ( string name )
56
+ protected override T CreateInstance ( string name )
58
57
{
59
58
var apiVersioningOptions = Options ;
60
- var options = new T ( )
61
- {
62
- AssumeDefaultVersionWhenUnspecified = apiVersioningOptions . AssumeDefaultVersionWhenUnspecified ,
63
- ApiVersionParameterSource = apiVersioningOptions . ApiVersionReader ,
64
- DefaultApiVersion = apiVersioningOptions . DefaultApiVersion ,
65
- RouteConstraintName = apiVersioningOptions . RouteConstraintName ,
66
- } ;
67
-
68
- foreach ( var setup in Setups )
69
- {
70
- if ( setup is IConfigureNamedOptions < T > namedSetup )
71
- {
72
- namedSetup . Configure ( name , options ) ;
73
- }
74
- else if ( name == Option . DefaultName )
75
- {
76
- setup . Configure ( options ) ;
77
- }
78
- }
59
+ var options = base . CreateInstance ( name ) ;
79
60
80
- foreach ( var post in PostConfigures )
81
- {
82
- post . PostConfigure ( name , options ) ;
83
- }
61
+ options . AssumeDefaultVersionWhenUnspecified = apiVersioningOptions . AssumeDefaultVersionWhenUnspecified ;
62
+ options . ApiVersionParameterSource = apiVersioningOptions . ApiVersionReader ;
63
+ options . DefaultApiVersion = apiVersioningOptions . DefaultApiVersion ;
64
+ options . RouteConstraintName = apiVersioningOptions . RouteConstraintName ;
84
65
85
66
return options ;
86
67
}
0 commit comments