@@ -99,21 +99,32 @@ static object CreateInstance( this IServiceProvider services, ServiceDescriptor
99
99
100
100
static ServiceDescriptor WithUrlHelperFactoryDecorator ( IServiceCollection services )
101
101
{
102
- var descriptor = services . First ( sd => sd . ServiceType == typeof ( IUrlHelperFactory ) ) ;
103
- var factory = ActivatorUtilities . CreateFactory ( typeof ( ApiVersionUrlHelperFactory ) , new [ ] { typeof ( IUrlHelperFactory ) } ) ;
102
+ var descriptor = services . FirstOrDefault ( sd => sd . ServiceType == typeof ( IUrlHelperFactory ) ) ;
103
+ var lifetime = ServiceLifetime . Singleton ;
104
+ Func < IServiceProvider , object > instantiate = sp => new UrlHelperFactory ( ) ;
105
+
106
+ if ( descriptor != null )
107
+ {
108
+ lifetime = descriptor . Lifetime ;
109
+ instantiate = sp => sp . CreateInstance ( descriptor ) ;
110
+ }
104
111
105
112
IUrlHelperFactory NewFactory ( IServiceProvider serviceProvider )
106
113
{
107
- var decorated = serviceProvider . CreateInstance ( descriptor ! ) ;
114
+ var decorated = instantiate ( serviceProvider ) ;
108
115
var options = serviceProvider . GetRequiredService < IOptions < ApiVersioningOptions > > ( ) . Value ;
109
- var instance = options . ApiVersionReader . VersionsByUrlSegment ( ) ?
110
- factory ( serviceProvider , new [ ] { decorated } ) :
111
- decorated ;
116
+ var instance = decorated ;
117
+
118
+ if ( options . ApiVersionReader . VersionsByUrlSegment ( ) )
119
+ {
120
+ var factory = ActivatorUtilities . CreateFactory ( typeof ( ApiVersionUrlHelperFactory ) , new [ ] { typeof ( IUrlHelperFactory ) } ) ;
121
+ instance = factory ( serviceProvider , new [ ] { decorated } ) ;
122
+ }
112
123
113
124
return ( IUrlHelperFactory ) instance ;
114
125
}
115
126
116
- return Describe ( typeof ( IUrlHelperFactory ) , NewFactory , descriptor . Lifetime ) ;
127
+ return Describe ( typeof ( IUrlHelperFactory ) , NewFactory , lifetime ) ;
117
128
}
118
129
}
119
130
}
0 commit comments