Skip to content

Commit cb95c4f

Browse files
Chris Martinezcommonsensesoftware
Chris Martinez
authored andcommitted
Handled unregistered IUrlHelperFactory. Fixes #673
1 parent 261564c commit cb95c4f

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/Microsoft.AspNetCore.Mvc.Versioning/Microsoft.Extensions.DependencyInjection/IServiceCollectionExtensions.cs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)