Skip to content
This repository was archived by the owner on Apr 29, 2022. It is now read-only.

Commit 9fc4bf3

Browse files
author
Anton Vorontsov
committed
FIxed multiple enumerations.
1 parent 3e12b06 commit 9fc4bf3

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/RabbitMQ.Client.Core.DependencyInjection/Exceptions/QueueingServiceAlreadyConfiguredException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace RabbitMQ.Client.Core.DependencyInjection.Exceptions
88
public class QueueingServiceAlreadyConfiguredException : Exception
99
{
1010
/// <summary>
11-
/// Type of a queuing service.
11+
/// Type of queuing service.
1212
/// </summary>
1313
public Type QueueingServiceType { get; }
1414

src/RabbitMQ.Client.Core.DependencyInjection/Extensions/BaseMessageHandlerDependencyInjectionExtensions.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,42 +25,45 @@ internal static IServiceCollection AddInstanceTransient<TInterface, TImplementat
2525
where TInterface : class
2626
where TImplementation : class, TInterface
2727
{
28+
var patterns = routePatterns.ToList();
2829
services.AddTransient<TInterface, TImplementation>();
2930
var router = new MessageHandlerRouter
3031
{
3132
Type = typeof(TImplementation),
3233
Exchange = exchange,
33-
RoutePatterns = routePatterns.ToList()
34+
RoutePatterns = patterns
3435
};
3536
services.Add(new ServiceDescriptor(typeof(MessageHandlerRouter), router));
36-
services.AddMessageHandlerOrderingModel<TImplementation>(routePatterns, exchange, order);
37+
services.AddMessageHandlerOrderingModel<TImplementation>(patterns, exchange, order);
3738
return services;
3839
}
3940

4041
internal static IServiceCollection AddInstanceSingleton<TInterface, TImplementation>(this IServiceCollection services, IEnumerable<string> routePatterns, string exchange, int order)
4142
where TInterface : class
4243
where TImplementation : class, TInterface
4344
{
45+
var patterns = routePatterns.ToList();
4446
services.AddSingleton<TInterface, TImplementation>();
4547
var router = new MessageHandlerRouter
4648
{
4749
Type = typeof(TImplementation),
4850
Exchange = exchange,
49-
RoutePatterns = routePatterns.ToList()
51+
RoutePatterns = patterns
5052
};
5153
services.Add(new ServiceDescriptor(typeof(MessageHandlerRouter), router));
52-
services.AddMessageHandlerOrderingModel<TImplementation>(routePatterns, exchange, order);
54+
services.AddMessageHandlerOrderingModel<TImplementation>(patterns, exchange, order);
5355
return services;
5456
}
5557

5658
static IServiceCollection AddMessageHandlerOrderingModel<TImplementation>(this IServiceCollection services, IEnumerable<string> routePatterns, string exchange, int order)
5759
where TImplementation : class
5860
{
59-
MessageHandlerOrderingModelExists<TImplementation>(services, routePatterns, exchange, order);
61+
var patterns = routePatterns.ToList();
62+
MessageHandlerOrderingModelExists<TImplementation>(services, patterns, exchange, order);
6063
var messageHandlerOrderingModel = new MessageHandlerOrderingModel
6164
{
6265
Exchange = exchange,
63-
RoutePatterns = routePatterns,
66+
RoutePatterns = patterns,
6467
Order = order,
6568
MessageHandlerType = typeof(TImplementation)
6669
};
@@ -70,19 +73,20 @@ static IServiceCollection AddMessageHandlerOrderingModel<TImplementation>(this I
7073

7174
static void MessageHandlerOrderingModelExists<TImplementation>(IServiceCollection services, IEnumerable<string> routePatterns, string exchange, int order)
7275
{
76+
var patterns = routePatterns.ToList();
7377
var messageHandlerOrderingModel = services.FirstOrDefault(x => x.ServiceType == typeof(MessageHandlerOrderingModel)
7478
&& x.Lifetime == ServiceLifetime.Singleton
7579
&& ((MessageHandlerOrderingModel)x.ImplementationInstance).MessageHandlerType == typeof(TImplementation)
7680
&& (string.Equals(((MessageHandlerOrderingModel)x.ImplementationInstance).Exchange, exchange, StringComparison.OrdinalIgnoreCase)
7781
|| (exchange is null && ((MessageHandlerOrderingModel)x.ImplementationInstance).Exchange is null))
7882
&& ((MessageHandlerOrderingModel)x.ImplementationInstance).Order != order
79-
&& routePatterns.Intersect(((MessageHandlerOrderingModel)x.ImplementationInstance).RoutePatterns).Any());
83+
&& patterns.Intersect(((MessageHandlerOrderingModel)x.ImplementationInstance).RoutePatterns).Any());
8084
if (messageHandlerOrderingModel is null)
8185
{
8286
return;
8387
}
8488

85-
var intersectRoutePatterns = routePatterns.Intersect(((MessageHandlerOrderingModel)messageHandlerOrderingModel.ImplementationInstance).RoutePatterns);
89+
var intersectRoutePatterns = patterns.Intersect(((MessageHandlerOrderingModel)messageHandlerOrderingModel.ImplementationInstance).RoutePatterns);
8690
throw new ArgumentException($"A message handler {nameof(TImplementation)} for an exchange {exchange} has already been configured for route patterns[{string.Join(", ", intersectRoutePatterns)}] with an order {order}.");
8791
}
8892
}

0 commit comments

Comments
 (0)