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; } }