diff --git a/src/AspNet/OData/test/Asp.Versioning.WebApi.OData.Tests/Controllers/VersionedMetadataControllerTest.cs b/src/AspNet/OData/test/Asp.Versioning.WebApi.OData.Tests/Controllers/VersionedMetadataControllerTest.cs
index 60292852..c39e10b4 100644
--- a/src/AspNet/OData/test/Asp.Versioning.WebApi.OData.Tests/Controllers/VersionedMetadataControllerTest.cs
+++ b/src/AspNet/OData/test/Asp.Versioning.WebApi.OData.Tests/Controllers/VersionedMetadataControllerTest.cs
@@ -37,6 +37,7 @@ public async Task options_should_return_expected_headers()
configuration.AddApiVersioning(
options =>
{
+ options.ReportApiVersions = true;
options.Policies.Sunset( "VersionedMetadata" )
.Link( "policies" )
.Title( "Versioning Policy" )
diff --git a/src/AspNet/WebApi/src/Asp.Versioning.WebApi.ApiExplorer/ApiExplorer/VersionedApiExplorer.cs b/src/AspNet/WebApi/src/Asp.Versioning.WebApi.ApiExplorer/ApiExplorer/VersionedApiExplorer.cs
index 36b1de41..c7585844 100644
--- a/src/AspNet/WebApi/src/Asp.Versioning.WebApi.ApiExplorer/ApiExplorer/VersionedApiExplorer.cs
+++ b/src/AspNet/WebApi/src/Asp.Versioning.WebApi.ApiExplorer/ApiExplorer/VersionedApiExplorer.cs
@@ -101,7 +101,7 @@ public IDocumentationProvider DocumentationProvider
/// The configured sunset policy manager.
protected ISunsetPolicyManager SunsetPolicyManager
{
- get => sunsetPolicyManager ??= Configuration.DependencyResolver.GetSunsetPolicyManager();
+ get => sunsetPolicyManager ??= Configuration.GetSunsetPolicyManager();
set => sunsetPolicyManager = value;
}
@@ -227,7 +227,7 @@ protected virtual ApiDescriptionGroupCollection InitializeApiDescriptions()
}
var routes = FlattenRoutes( Configuration.Routes ).ToArray();
- var policyManager = Configuration.DependencyResolver.GetSunsetPolicyManager();
+ var policyManager = Configuration.GetSunsetPolicyManager();
foreach ( var apiVersion in FlattenApiVersions( controllerMappings ) )
{
diff --git a/src/AspNet/WebApi/src/Asp.Versioning.WebApi/ApiVersionRequestProperties.cs b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/ApiVersionRequestProperties.cs
index 284c66ba..0383fb9c 100644
--- a/src/AspNet/WebApi/src/Asp.Versioning.WebApi/ApiVersionRequestProperties.cs
+++ b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/ApiVersionRequestProperties.cs
@@ -88,7 +88,7 @@ public ApiVersion? RequestedApiVersion
return apiVersion;
}
- var parser = request.GetConfiguration().DependencyResolver.GetApiVersionParser();
+ var parser = request.GetConfiguration().GetApiVersionParser();
try
{
diff --git a/src/AspNet/WebApi/src/Asp.Versioning.WebApi/DefaultApiVersionReporter.cs b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/DefaultApiVersionReporter.cs
index dc05e257..caa7f0be 100644
--- a/src/AspNet/WebApi/src/Asp.Versioning.WebApi/DefaultApiVersionReporter.cs
+++ b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/DefaultApiVersionReporter.cs
@@ -10,11 +10,6 @@ namespace Asp.Versioning;
///
public partial class DefaultApiVersionReporter
{
- private static DefaultApiVersionReporter? instance;
-
- internal static IReportApiVersions GetOrCreate( ISunsetPolicyManager sunsetPolicyManager ) =>
- instance ??= new( sunsetPolicyManager );
-
private static void AddApiVersionHeader( HttpResponseHeaders headers, string headerName, IReadOnlyList versions )
{
if ( versions.Count == 0 || headers.Contains( headerName ) )
diff --git a/src/AspNet/WebApi/src/Asp.Versioning.WebApi/Dependencies/DefaultContainer.cs b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/Dependencies/DefaultContainer.cs
new file mode 100644
index 00000000..7725393c
--- /dev/null
+++ b/src/AspNet/WebApi/src/Asp.Versioning.WebApi/Dependencies/DefaultContainer.cs
@@ -0,0 +1,84 @@
+// Copyright (c) .NET Foundation and contributors. All rights reserved.
+
+namespace Asp.Versioning.Dependencies;
+
+using Asp.Versioning;
+using Asp.Versioning.Conventions;
+using System.ComponentModel.Design;
+using System.Web.Http.Dependencies;
+
+internal sealed class DefaultContainer : IDependencyResolver, IDependencyScope
+{
+ private readonly ServiceContainer container = new();
+ private bool disposed;
+
+ internal DefaultContainer()
+ {
+ container.AddService( typeof( ApiVersioningOptions ), static ( sc, t ) => new ApiVersioningOptions() );
+ container.AddService( typeof( IApiVersionParser ), static ( sc, t ) => ApiVersionParser.Default );
+ container.AddService( typeof( IControllerNameConvention ), static ( sc, t ) => ControllerNameConvention.Default );
+ container.AddService( typeof( IProblemDetailsFactory ), static ( sc, t ) => new ProblemDetailsFactory() );
+ container.AddService( typeof( ISunsetPolicyManager ), NewSunsetPolicyManager );
+ container.AddService( typeof( IReportApiVersions ), NewApiVersionReporter );
+ }
+
+ public ApiVersioningOptions ApiVersioningOptions
+ {
+ get => GetApiVersioningOptions( container );
+ set
+ {
+ container.RemoveService( typeof( ApiVersioningOptions ) );
+ container.AddService( typeof( ApiVersioningOptions ), value );
+ }
+ }
+
+ public void Replace( Type serviceType, ServiceCreatorCallback activator )
+ {
+ container.RemoveService( serviceType );
+ container.AddService( serviceType, activator );
+ }
+
+ public IDependencyScope BeginScope() => this;
+
+ public void Dispose()
+ {
+ if ( disposed )
+ {
+ return;
+ }
+
+ disposed = true;
+ container.Dispose();
+ }
+
+ public object GetService( Type serviceType ) => container.GetService( serviceType );
+
+ public IEnumerable