@@ -99,21 +99,32 @@ static object CreateInstance( this IServiceProvider services, ServiceDescriptor
9999
100100 static ServiceDescriptor WithUrlHelperFactoryDecorator ( IServiceCollection services )
101101 {
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+ }
104111
105112 IUrlHelperFactory NewFactory ( IServiceProvider serviceProvider )
106113 {
107- var decorated = serviceProvider . CreateInstance ( descriptor ! ) ;
114+ var decorated = instantiate ( serviceProvider ) ;
108115 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+ }
112123
113124 return ( IUrlHelperFactory ) instance ;
114125 }
115126
116- return Describe ( typeof ( IUrlHelperFactory ) , NewFactory , descriptor . Lifetime ) ;
127+ return Describe ( typeof ( IUrlHelperFactory ) , NewFactory , lifetime ) ;
117128 }
118129 }
119130}
0 commit comments