Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .autover/changes/55b720e8-c5d2-41e0-abda-658b2f39f77e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"Projects": [
{
"Name": "AWS.Messaging",
"Type": "Patch",
"ChangelogMessages": [
"Add builder overload to modify underlying service collection on build"
]
}
]
}
7 changes: 7 additions & 0 deletions src/AWS.Messaging/Configuration/IMessageBusBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ public interface IMessageBusBuilder
/// <returns></returns>
IMessageBusBuilder AddAdditionalService(ServiceDescriptor serviceDescriptor);

/// <summary>
/// Add additional services to the <see cref="IMessageBusBuilder"/>. This method is used for AWS.Messaging plugins to add services for messaging.
/// </summary>
/// <param name="action">Configuration action to perform against the service collection.</param>
/// <returns></returns>
IMessageBusBuilder AddAdditionalService(Action<IMessageConfiguration, IServiceCollection> action);

/// <summary>
/// Enables the visibility of data messages in the logging framework, exception handling and other areas.
/// If this is enabled, messages sent by this framework will be visible in plain text across the framework's components.
Expand Down
15 changes: 11 additions & 4 deletions src/AWS.Messaging/Configuration/MessageBusBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class MessageBusBuilder : IMessageBusBuilder
{
private static readonly ConcurrentDictionary<IServiceCollection, MessageConfiguration> _messageConfigurations = new();
private readonly MessageConfiguration _messageConfiguration;
private readonly IList<ServiceDescriptor> _additionalServices = new List<ServiceDescriptor>();
private readonly IList<Action<IMessageConfiguration, IServiceCollection>> _additionalServices = new List<Action<IMessageConfiguration, IServiceCollection>>();
private readonly IServiceCollection _serviceCollection;

/// <summary>
Expand Down Expand Up @@ -301,7 +301,14 @@ MessageEnvelope envelopeFactory()
/// <inheritdoc/>
public IMessageBusBuilder AddAdditionalService(ServiceDescriptor serviceDescriptor)
{
_additionalServices.Add(serviceDescriptor);
_additionalServices.Add((_, services) => services.TryAdd(serviceDescriptor));
return this;
}

/// <inheritdoc/>
public IMessageBusBuilder AddAdditionalService(Action<IMessageConfiguration, IServiceCollection> action)
{
_additionalServices.Add(action);
return this;
}

Expand Down Expand Up @@ -410,9 +417,9 @@ internal void Build()
}
}

foreach (var service in _additionalServices)
foreach (var action in _additionalServices)
{
_serviceCollection.TryAdd(service);
action.Invoke(_messageConfiguration, _serviceCollection);
}
}

Expand Down