diff --git a/src/Ocelot/Configuration/Creator/FileInternalConfigurationCreator.cs b/src/Ocelot/Configuration/Creator/FileInternalConfigurationCreator.cs index d393b648..89bd7a41 100644 --- a/src/Ocelot/Configuration/Creator/FileInternalConfigurationCreator.cs +++ b/src/Ocelot/Configuration/Creator/FileInternalConfigurationCreator.cs @@ -10,6 +10,7 @@ using Ocelot.Configuration.Validator; using Ocelot.DependencyInjection; using Ocelot.Logging; using Ocelot.Responses; +using Microsoft.Extensions.DependencyInjection; namespace Ocelot.Configuration.Creator { @@ -49,14 +50,14 @@ namespace Ocelot.Configuration.Creator IRateLimitOptionsCreator rateLimitOptionsCreator, IRegionCreator regionCreator, IHttpHandlerOptionsCreator httpHandlerOptionsCreator, - IAdministrationPath adminPath, + IServiceProvider serviceProvider, IHeaderFindAndReplaceCreator headerFAndRCreator, IDownstreamAddressesCreator downstreamAddressesCreator ) { _downstreamAddressesCreator = downstreamAddressesCreator; _headerFAndRCreator = headerFAndRCreator; - _adminPath = adminPath; + _adminPath = serviceProvider.GetService(); _regionCreator = regionCreator; _rateLimitOptionsCreator = rateLimitOptionsCreator; _requestIdKeyCreator = requestIdKeyCreator; @@ -117,8 +118,10 @@ namespace Ocelot.Configuration.Creator var httpHandlerOptions = _httpHandlerOptionsCreator.Create(fileConfiguration.GlobalConfiguration.HttpHandlerOptions); + var adminPath = _adminPath != null ? _adminPath.Path : null; + var config = new InternalConfiguration(reRoutes, - _adminPath.Path, + adminPath, serviceProviderConfiguration, fileConfiguration.GlobalConfiguration.RequestIdKey, lbOptions, diff --git a/src/Ocelot/DependencyInjection/NullAdministrationPath.cs b/src/Ocelot/DependencyInjection/NullAdministrationPath.cs deleted file mode 100644 index 7ef626b7..00000000 --- a/src/Ocelot/DependencyInjection/NullAdministrationPath.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ocelot.DependencyInjection -{ - public class NullAdministrationPath : IAdministrationPath - { - public NullAdministrationPath() - { - Path = null; - } - - public string Path {get;private set;} - } -} diff --git a/src/Ocelot/DependencyInjection/OcelotBuilder.cs b/src/Ocelot/DependencyInjection/OcelotBuilder.cs index c742fd0f..f120742d 100644 --- a/src/Ocelot/DependencyInjection/OcelotBuilder.cs +++ b/src/Ocelot/DependencyInjection/OcelotBuilder.cs @@ -152,12 +152,10 @@ namespace Ocelot.DependencyInjection _services.AddLogging(); _services.AddMiddlewareAnalysis(); _services.AddWebEncoders(); - _services.AddSingleton(new NullAdministrationPath()); _services.TryAddSingleton(); _services.TryAddSingleton(); _services.AddSingleton(); - _services.TryAddSingleton(); _services.TryAddSingleton(); _services.TryAddSingleton(); @@ -180,8 +178,7 @@ namespace Ocelot.DependencyInjection AddIdentityServer(identityServerConfiguration, administrationPath); } - var descriptor = new ServiceDescriptor(typeof(IAdministrationPath), administrationPath); - _services.Replace(descriptor); + _services.AddSingleton(administrationPath); return new OcelotAdministrationBuilder(_services, _configurationRoot); } @@ -194,9 +191,7 @@ namespace Ocelot.DependencyInjection AddIdentityServer(configureOptions); } - //todo - hack because we add this earlier so it always exists for some reason...investigate.. - var descriptor = new ServiceDescriptor(typeof(IAdministrationPath), administrationPath); - _services.Replace(descriptor); + _services.AddSingleton(administrationPath); return new OcelotAdministrationBuilder(_services, _configurationRoot); } diff --git a/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs b/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs index d5421b12..00a2a2ae 100644 --- a/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs +++ b/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs @@ -139,7 +139,7 @@ private static bool AdministrationApiInUse(IAdministrationPath adminPath) { - return adminPath.GetType() != typeof(NullAdministrationPath); + return adminPath != null; } private static async Task SetFileConfigInConsul(IApplicationBuilder builder, diff --git a/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs b/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs index b9d4a422..f545e04c 100644 --- a/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs +++ b/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs @@ -36,7 +36,7 @@ private readonly Mock _rateLimitOptions; private readonly Mock _regionCreator; private readonly Mock _httpHandlerOptionsCreator; - private readonly Mock _adminPath; + private readonly Mock _serviceProvider; private readonly Mock _headerFindAndReplaceCreator; private readonly Mock _downstreamAddressesCreator; @@ -54,7 +54,7 @@ _rateLimitOptions = new Mock(); _regionCreator = new Mock(); _httpHandlerOptionsCreator = new Mock(); - _adminPath = new Mock(); + _serviceProvider = new Mock(); _headerFindAndReplaceCreator = new Mock(); _downstreamAddressesCreator = new Mock(); @@ -71,7 +71,7 @@ _rateLimitOptions.Object, _regionCreator.Object, _httpHandlerOptionsCreator.Object, - _adminPath.Object, + _serviceProvider.Object, _headerFindAndReplaceCreator.Object, _downstreamAddressesCreator.Object); }