11using System ;
2+ using System . Linq ;
23using Microsoft . Extensions . Configuration ;
34using Microsoft . Extensions . DependencyInjection ;
45using Microsoft . Extensions . DependencyInjection . Extensions ;
56using Microsoft . Extensions . Logging ;
67using RabbitMQ . Client . Core . DependencyInjection . Configuration ;
8+ using RabbitMQ . Client . Core . DependencyInjection . Exceptions ;
79using RabbitMQ . Client . Core . DependencyInjection . Models ;
810
911namespace RabbitMQ . Client . Core . DependencyInjection
@@ -24,6 +26,7 @@ public static class RabbitMqClientDependencyInjectionExtensions
2426 /// <returns>Service collection.</returns>
2527 public static IServiceCollection AddRabbitMqClient ( this IServiceCollection services , IConfiguration configuration )
2628 {
29+ services . CheckIfQueueingServiceAlreadyConfigured < IQueueService > ( ) ;
2730 services . AddRabbitMqClientInfrastructure ( ) ;
2831 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
2932 var guid = Guid . NewGuid ( ) ;
@@ -43,6 +46,7 @@ public static IServiceCollection AddRabbitMqClient(this IServiceCollection servi
4346 /// <returns>Service collection.</returns>
4447 public static IServiceCollection AddRabbitMqClient ( this IServiceCollection services , RabbitMqClientOptions configuration )
4548 {
49+ services . CheckIfQueueingServiceAlreadyConfigured < IQueueService > ( ) ;
4650 services . AddRabbitMqClientInfrastructure ( ) ;
4751 var guid = Guid . NewGuid ( ) ;
4852 services . ConfigureRabbitMqConnectionOptions ( guid , configuration ) ;
@@ -61,6 +65,7 @@ public static IServiceCollection AddRabbitMqClient(this IServiceCollection servi
6165 /// <returns>Service collection.</returns>
6266 public static IServiceCollection AddRabbitMqClientTransient ( this IServiceCollection services , IConfiguration configuration )
6367 {
68+ services . CheckIfQueueingServiceAlreadyConfigured < IQueueService > ( ) ;
6469 services . AddRabbitMqClientInfrastructure ( ) ;
6570 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
6671 var guid = Guid . NewGuid ( ) ;
@@ -80,6 +85,7 @@ public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollect
8085 /// <returns>Service collection.</returns>
8186 public static IServiceCollection AddRabbitMqClientTransient ( this IServiceCollection services , RabbitMqClientOptions configuration )
8287 {
88+ services . CheckIfQueueingServiceAlreadyConfigured < IQueueService > ( ) ;
8389 services . AddRabbitMqClientInfrastructure ( ) ;
8490 var guid = Guid . NewGuid ( ) ;
8591 services . ConfigureRabbitMqConnectionOptions ( guid , configuration ) ;
@@ -95,6 +101,7 @@ public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollect
95101 /// <returns>Service collection.</returns>
96102 public static IServiceCollection AddRabbitMqProducingClientSingleton ( this IServiceCollection services , IConfiguration configuration )
97103 {
104+ services . CheckIfQueueingServiceAlreadyConfigured < IProducingService > ( ) ;
98105 services . AddRabbitMqClientInfrastructure ( ) ;
99106 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
100107 var guid = Guid . NewGuid ( ) ;
@@ -111,6 +118,7 @@ public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServi
111118 /// <returns>Service collection.</returns>
112119 public static IServiceCollection AddRabbitMqProducingClientSingleton ( this IServiceCollection services , RabbitMqClientOptions configuration )
113120 {
121+ services . CheckIfQueueingServiceAlreadyConfigured < IProducingService > ( ) ;
114122 services . AddRabbitMqClientInfrastructure ( ) ;
115123 var guid = Guid . NewGuid ( ) ;
116124 services . ConfigureRabbitMqProducingClientOptions ( guid , configuration ) ;
@@ -126,6 +134,7 @@ public static IServiceCollection AddRabbitMqProducingClientSingleton(this IServi
126134 /// <returns>Service collection.</returns>
127135 public static IServiceCollection AddRabbitMqProducingClientTransient ( this IServiceCollection services , IConfiguration configuration )
128136 {
137+ services . CheckIfQueueingServiceAlreadyConfigured < IProducingService > ( ) ;
129138 services . AddRabbitMqClientInfrastructure ( ) ;
130139 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
131140 var guid = Guid . NewGuid ( ) ;
@@ -142,6 +151,7 @@ public static IServiceCollection AddRabbitMqProducingClientTransient(this IServi
142151 /// <returns>Service collection.</returns>
143152 public static IServiceCollection AddRabbitMqProducingClientTransient ( this IServiceCollection services , RabbitMqClientOptions configuration )
144153 {
154+ services . CheckIfQueueingServiceAlreadyConfigured < IProducingService > ( ) ;
145155 services . AddRabbitMqClientInfrastructure ( ) ;
146156 var guid = Guid . NewGuid ( ) ;
147157 services . ConfigureRabbitMqProducingClientOptions ( guid , configuration ) ;
@@ -157,6 +167,7 @@ public static IServiceCollection AddRabbitMqProducingClientTransient(this IServi
157167 /// <returns>Service collection.</returns>
158168 public static IServiceCollection AddRabbitMqConsumingClientSingleton ( this IServiceCollection services , IConfiguration configuration )
159169 {
170+ services . CheckIfQueueingServiceAlreadyConfigured < IConsumingService > ( ) ;
160171 services . AddRabbitMqClientInfrastructure ( ) ;
161172 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
162173 var guid = Guid . NewGuid ( ) ;
@@ -173,6 +184,7 @@ public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServi
173184 /// <returns>Service collection.</returns>
174185 public static IServiceCollection AddRabbitMqConsumingClientSingleton ( this IServiceCollection services , RabbitMqClientOptions configuration )
175186 {
187+ services . CheckIfQueueingServiceAlreadyConfigured < IConsumingService > ( ) ;
176188 services . AddRabbitMqClientInfrastructure ( ) ;
177189 var guid = Guid . NewGuid ( ) ;
178190 services . ConfigureRabbitMqConsumingClientOptions ( guid , configuration ) ;
@@ -188,6 +200,7 @@ public static IServiceCollection AddRabbitMqConsumingClientSingleton(this IServi
188200 /// <returns>Service collection.</returns>
189201 public static IServiceCollection AddRabbitMqConsumingClientTransient ( this IServiceCollection services , IConfiguration configuration )
190202 {
203+ services . CheckIfQueueingServiceAlreadyConfigured < IConsumingService > ( ) ;
191204 services . AddRabbitMqClientInfrastructure ( ) ;
192205 var configurationInstance = GetRabbitMqClientOptionsInstance ( configuration ) ;
193206 var guid = Guid . NewGuid ( ) ;
@@ -204,6 +217,7 @@ public static IServiceCollection AddRabbitMqConsumingClientTransient(this IServi
204217 /// <returns>Service collection.</returns>
205218 public static IServiceCollection AddRabbitMqConsumingClientTransient ( this IServiceCollection services , RabbitMqClientOptions configuration )
206219 {
220+ services . CheckIfQueueingServiceAlreadyConfigured < IConsumingService > ( ) ;
207221 services . AddRabbitMqClientInfrastructure ( ) ;
208222 var guid = Guid . NewGuid ( ) ;
209223 services . ConfigureRabbitMqConsumingClientOptions ( guid , configuration ) ;
@@ -229,7 +243,6 @@ static RabbitMqClientOptions GetRabbitMqClientOptionsInstance(IConfiguration con
229243
230244 static IServiceCollection ConfigureRabbitMqProducingClientOptions ( this IServiceCollection services , Guid guid , RabbitMqClientOptions options )
231245 {
232- // TODO: Check if it already exists .
233246 var container = new RabbitMqConnectionOptionsContainer
234247 {
235248 Guid = guid ,
@@ -240,7 +253,6 @@ static IServiceCollection ConfigureRabbitMqProducingClientOptions(this IServiceC
240253
241254 static IServiceCollection ConfigureRabbitMqConsumingClientOptions ( this IServiceCollection services , Guid guid , RabbitMqClientOptions options )
242255 {
243- // TODO: Check if it already exists .
244256 var container = new RabbitMqConnectionOptionsContainer
245257 {
246258 Guid = guid ,
@@ -251,7 +263,6 @@ static IServiceCollection ConfigureRabbitMqConsumingClientOptions(this IServiceC
251263
252264 static IServiceCollection ConfigureRabbitMqConnectionOptions ( this IServiceCollection services , Guid guid , RabbitMqClientOptions options )
253265 {
254- // TODO: Check if it already exists .
255266 var container = new RabbitMqConnectionOptionsContainer
256267 {
257268 Guid = guid ,
@@ -336,5 +347,16 @@ static IServiceCollection ResolveTransientConsumingService(this IServiceCollecti
336347 provider . GetService < ILogger < QueueService > > ( ) ) ) ;
337348 return services ;
338349 }
350+
351+ static IServiceCollection CheckIfQueueingServiceAlreadyConfigured < T > ( this IServiceCollection services )
352+ {
353+ var descriptor = services . FirstOrDefault ( x => x . ServiceType == typeof ( T ) ) ;
354+ if ( descriptor != null )
355+ {
356+ throw new QueueingServiceAlreadyConfiguredException ( typeof ( T ) , $ "A queueing service of type { typeof ( T ) } has been already configured.") ;
357+ }
358+
359+ return services ;
360+ }
339361 }
340362}
0 commit comments