diff --git a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs
index bd4bf2ec58a8..d275c7b28354 100644
--- a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs
+++ b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs
@@ -15,9 +15,9 @@ public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
- services.AddStackPolicy(options =>
+ services.AddConcurrencyLimiter().AddStackPolicy(options =>
{
- options.MaxConcurrentRequests = 2;
+ options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
}
diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs
new file mode 100644
index 000000000000..8eebc777bb31
--- /dev/null
+++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs
@@ -0,0 +1,24 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information
+
+using System;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Microsoft.AspNetCore.ConcurrencyLimiter
+{
+ public class ConcurrencyLimiterBuilder
+ {
+ public ConcurrencyLimiterBuilder(IServiceCollection services)
+ {
+ Services = services ?? throw new ArgumentNullException(nameof(services));
+ }
+
+ ///
+ /// Gets the services are attached to.
+ ///
+ ///
+ /// The services are attached to.
+ ///
+ public IServiceCollection Services { get; }
+ }
+}
diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs
new file mode 100644
index 000000000000..2bcad30d7191
--- /dev/null
+++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs
@@ -0,0 +1,67 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information
+
+using System;
+using Microsoft.AspNetCore.ConcurrencyLimiter;
+
+namespace Microsoft.Extensions.DependencyInjection
+{
+ public static class ConcurrencyLimiterBuilderExtensions
+ {
+ ///
+ /// Tells to use a FIFO queue as its queueing strategy.
+ ///
+ ///
+ /// Set the options used by the queue.
+ ///
+ public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder, Action configure)
+ {
+ builder.Services.AddOptions().Configure(configure);
+
+ builder.Services.AddSingleton();
+ return builder;
+ }
+
+ ///
+ /// Tells to use a FIFO queue as its queueing strategy.
+ ///
+ ///
+ /// Set the options used by the queue.
+ ///
+ public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder, Action configure)
+ {
+ builder.Services.AddOptions().Configure(configure);
+
+ builder.Services.AddSingleton();
+ return builder;
+ }
+
+ ///
+ /// Tells to use a LIFO stack as its queueing strategy.
+ ///
+ ///
+ /// Set the options used by the queue.
+ ///
+ public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder, Action configure)
+ {
+ builder.Services.AddOptions().Configure(configure);
+
+ builder.Services.AddSingleton();
+ return builder;
+ }
+
+ ///
+ /// Tells to use a LIFO stack as its queueing strategy.
+ ///
+ ///
+ /// Set the options used by the queue.
+ ///
+ public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder, Action configure)
+ {
+ builder.Services.AddOptions().Configure(configure);
+
+ builder.Services.AddSingleton();
+ return builder;
+ }
+ }
+}
diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs
new file mode 100644
index 000000000000..c4c10163308f
--- /dev/null
+++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs
@@ -0,0 +1,21 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using Microsoft.AspNetCore.ConcurrencyLimiter;
+
+namespace Microsoft.Extensions.DependencyInjection
+{
+ public static class ConcurrencyMiddlewareServiceCollectionExtensions
+ {
+ ///
+ ///
+ ///
+ /// The to add services to.
+ ///
+ public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services)
+ {
+ return new ConcurrencyLimiterBuilder(services);
+ }
+ }
+}
diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs
index 09b9aeb48ff5..aefd513231d9 100644
--- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs
+++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs
@@ -18,10 +18,12 @@ public static class QueuePolicyServiceCollectionExtensions
/// Set the options used by the queue.
/// Mandatory, since must be provided.
///
+ [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter().AddQueuePolicy(configure) instead")]
public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure)
{
- services.Configure(configure);
- services.AddSingleton();
+ services.AddConcurrencyLimiter()
+ .AddQueuePolicy(configure);
+
return services;
}
@@ -32,10 +34,12 @@ public static IServiceCollection AddQueuePolicy(this IServiceCollection services
/// Set the options used by the queue.
/// Mandatory, since must be provided.
///
+ [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter().AddStackPolicy(configure) instead")]
public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure)
{
- services.Configure(configure);
- services.AddSingleton();
+ services.AddConcurrencyLimiter()
+ .AddStackPolicy(configure);
+
return services;
}
}