@@ -25,6 +25,7 @@ namespace AWS.Messaging.Configuration;
2525/// </summary>
2626public class MessageBusBuilder : IMessageBusBuilder
2727{
28+ private static readonly Dictionary < IServiceCollection , MessageConfiguration > _messageConfigurations = new ( ) ;
2829 private readonly MessageConfiguration _messageConfiguration ;
2930 private readonly IList < ServiceDescriptor > _additionalServices = new List < ServiceDescriptor > ( ) ;
3031 private readonly IServiceCollection _serviceCollection ;
@@ -35,7 +36,15 @@ public class MessageBusBuilder : IMessageBusBuilder
3536 public MessageBusBuilder ( IServiceCollection services )
3637 {
3738 _serviceCollection = services ;
38- _messageConfiguration = new MessageConfiguration ( ) ;
39+ if ( _messageConfigurations . TryGetValue ( services , out var config ) )
40+ {
41+ _messageConfiguration = config ;
42+ }
43+ else
44+ {
45+ _messageConfiguration = new MessageConfiguration ( ) ;
46+ _messageConfigurations [ services ] = _messageConfiguration ;
47+ }
3948 }
4049
4150 /// <inheritdoc/>
@@ -129,7 +138,6 @@ public IMessageBusBuilder AddSQSPoller(string queueUrl, Action<SQSMessagePollerO
129138 VisibilityTimeoutExtensionHeartbeatInterval = sqsMessagePollerOptions . VisibilityTimeoutExtensionHeartbeatInterval ,
130139 WaitTimeSeconds = sqsMessagePollerOptions . WaitTimeSeconds ,
131140 IsExceptionFatal = sqsMessagePollerOptions . IsExceptionFatal
132-
133141 } ;
134142
135143 _messageConfiguration . MessagePollerConfigurations . Add ( sqsMessagePollerConfiguration ) ;
@@ -308,7 +316,7 @@ internal void Build()
308316 _serviceCollection . TryAdd ( ServiceDescriptor . Singleton < ILoggerFactory , NullLoggerFactory > ( ) ) ;
309317 _serviceCollection . TryAdd ( ServiceDescriptor . Singleton ( typeof ( ILogger < > ) , typeof ( NullLogger < > ) ) ) ;
310318
311- _serviceCollection . AddSingleton < IMessageConfiguration > ( _messageConfiguration ) ;
319+ _serviceCollection . TryAddSingleton < IMessageConfiguration > ( _messageConfiguration ) ;
312320 _serviceCollection . TryAddSingleton < IMessageSerializer , MessageSerializer > ( ) ;
313321 _serviceCollection . TryAddSingleton < IEnvelopeSerializer , EnvelopeSerializer > ( ) ;
314322 _serviceCollection . TryAddSingleton < IDateTimeHandler , DateTimeHandler > ( ) ;
@@ -326,18 +334,20 @@ internal void Build()
326334
327335 if ( _messageConfiguration . PublisherMappings . Any ( ) )
328336 {
329- _serviceCollection . AddSingleton < IMessagePublisher , MessageRoutingPublisher > ( ) ;
337+ _serviceCollection . TryAddSingleton < IMessagePublisher , MessageRoutingPublisher > ( ) ;
330338
331339 if ( _messageConfiguration . PublisherMappings . Any ( x => x . PublishTargetType == PublisherTargetType . SQS_PUBLISHER ) )
332340 {
333341 _serviceCollection . TryAddAWSService < Amazon . SQS . IAmazonSQS > ( ) ;
334342 _serviceCollection . TryAddSingleton < ISQSPublisher , SQSPublisher > ( ) ;
335343 }
344+
336345 if ( _messageConfiguration . PublisherMappings . Any ( x => x . PublishTargetType == PublisherTargetType . SNS_PUBLISHER ) )
337346 {
338347 _serviceCollection . TryAddAWSService < Amazon . SimpleNotificationService . IAmazonSimpleNotificationService > ( ) ;
339348 _serviceCollection . TryAddSingleton < ISNSPublisher , SNSPublisher > ( ) ;
340349 }
350+
341351 if ( _messageConfiguration . PublisherMappings . Any ( x => x . PublishTargetType == PublisherTargetType . EVENTBRIDGE_PUBLISHER ) )
342352 {
343353 _serviceCollection . TryAddAWSService < Amazon . EventBridge . IAmazonEventBridge > ( ) ;
@@ -351,7 +361,7 @@ internal void Build()
351361
352362 foreach ( var subscriberMapping in _messageConfiguration . SubscriberMappings )
353363 {
354- _serviceCollection . AddScoped ( subscriberMapping . HandlerType ) ;
364+ _serviceCollection . TryAddScoped ( subscriberMapping . HandlerType ) ;
355365 }
356366 }
357367
@@ -387,7 +397,7 @@ internal void Build()
387397
388398 foreach ( var service in _additionalServices )
389399 {
390- _serviceCollection . Add ( service ) ;
400+ _serviceCollection . TryAdd ( service ) ;
391401 }
392402 }
393403
0 commit comments