diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index b4c50fc..9532d52 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## 5.6.1
+- fixed
+ - Fixed an issue with dispatching messages when the Enabled flag is set to false.
+
## 5.6.0
- Added
- netstandard2.0 target framework.
diff --git a/src/Ev.ServiceBus/Dispatch/DispatchSender.cs b/src/Ev.ServiceBus/Dispatch/DispatchSender.cs
index 480402a..ed5c570 100644
--- a/src/Ev.ServiceBus/Dispatch/DispatchSender.cs
+++ b/src/Ev.ServiceBus/Dispatch/DispatchSender.cs
@@ -42,6 +42,8 @@ public DispatchSender(
///
public async Task SendDispatch(object messagePayload, CancellationToken token = default)
{
+ if (IsDisabled()) return;
+
var dispatch = new Abstractions.Dispatch(messagePayload);
await SendDispatch(dispatch, token);
@@ -50,6 +52,8 @@ public async Task SendDispatch(object messagePayload, CancellationToken token =
///
public async Task SendDispatch(Abstractions.Dispatch messagePayload, CancellationToken token = default)
{
+ if (IsDisabled()) return;
+
var dispatches = CreateMessagesToSend([messagePayload]);
foreach (var messagePerResource in dispatches)
@@ -74,6 +78,8 @@ public async Task SendDispatches(IEnumerable messagePayloads, Cancellati
throw new ArgumentNullException(nameof(messagePayloads));
}
+ if (IsDisabled()) return;
+
var dispatches = messagePayloads.Select(o => new Abstractions.Dispatch(o)).ToArray();
await SendDispatches(dispatches, token);
}
@@ -86,6 +92,8 @@ public async Task SendDispatches(IEnumerable messagePaylo
throw new ArgumentNullException(nameof(messagePayloads));
}
+ if (IsDisabled()) return;
+
var dispatches = CreateMessagesToSend(messagePayloads);
foreach (var messagesPerResource in dispatches)
{
@@ -139,6 +147,8 @@ public async Task ScheduleDispatches(IEnumerable messagePayloads, DateTi
throw new ArgumentNullException(nameof(messagePayloads));
}
+ if (IsDisabled()) return;
+
var dispatches = messagePayloads.Select(o => new Abstractions.Dispatch(o)).ToArray();
await ScheduleDispatches(dispatches, scheduledEnqueueTime, token);
}
@@ -151,6 +161,8 @@ public async Task ScheduleDispatches(IEnumerable messageP
throw new ArgumentNullException(nameof(messagePayloads));
}
+ if (IsDisabled()) return;
+
var dispatches = CreateMessagesToSend(messagePayloads);
foreach (var messagesPerResource in dispatches)
{
@@ -279,4 +291,6 @@ private ServiceBusMessage CreateMessage(
}
return message;
}
+
+ private bool IsDisabled() => _serviceBusOptions.Settings.Enabled == false;
}
\ No newline at end of file
diff --git a/tests/Ev.ServiceBus.UnitTests/DispatchTest.cs b/tests/Ev.ServiceBus.UnitTests/DispatchTest.cs
index 1009089..2111954 100644
--- a/tests/Ev.ServiceBus.UnitTests/DispatchTest.cs
+++ b/tests/Ev.ServiceBus.UnitTests/DispatchTest.cs
@@ -582,6 +582,159 @@ public async Task ShouldAssignIsolationKeyWhenInIsolationMode()
_sentMessagesToQueue[0].ApplicationProperties.GetIsolationKey().Should().Be(isolationKey);
}
+ [Fact]
+ public async Task SendDispatch_Object_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.SendDispatch((object)new SubscribedEvent { SomeNumber = 1, SomeString = "test" });
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task SendDispatch_Dispatch_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.SendDispatch(new Ev.ServiceBus.Abstractions.Dispatch(new SubscribedEvent { SomeNumber = 1, SomeString = "test" }));
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task SendDispatches_Objects_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.SendDispatches(new object[] { new SubscribedEvent { SomeNumber = 1, SomeString = "test" } });
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task SendDispatches_Dispatches_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.SendDispatches(new[] { new Ev.ServiceBus.Abstractions.Dispatch(new SubscribedEvent { SomeNumber = 1, SomeString = "test" }) });
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task ScheduleDispatches_Objects_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.ScheduleDispatches(
+ new object[] { new SubscribedEvent { SomeNumber = 1, SomeString = "test" } },
+ DateTimeOffset.UtcNow.AddDays(1));
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task ScheduleDispatches_Dispatches_WhenDisabled_DoesNotInvokeSender()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await sender.ScheduleDispatches(
+ new[] { new Ev.ServiceBus.Abstractions.Dispatch(new SubscribedEvent { SomeNumber = 1, SomeString = "test" }) },
+ DateTimeOffset.UtcNow.AddDays(1));
+ }
+
+ provider.GetRequiredService().GetSenderMock("myQueue").Should().BeNull();
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ // Null-argument checks must fire before IsDisabled() for all overloads that own them
+ [Fact]
+ public async Task SendDispatches_Objects_WhenDisabled_NullPayload_ThrowsArgumentNullException()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await Assert.ThrowsAsync(() => sender.SendDispatches((IEnumerable)null!));
+ }
+
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task SendDispatches_Dispatches_WhenDisabled_NullPayload_ThrowsArgumentNullException()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await Assert.ThrowsAsync(() => sender.SendDispatches((IEnumerable)null!));
+ }
+
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task ScheduleDispatches_Objects_WhenDisabled_NullPayload_ThrowsArgumentNullException()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await Assert.ThrowsAsync(() =>
+ sender.ScheduleDispatches((IEnumerable)null!, DateTimeOffset.UtcNow.AddDays(1)));
+ }
+
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
+ [Fact]
+ public async Task ScheduleDispatches_Dispatches_WhenDisabled_NullPayload_ThrowsArgumentNullException()
+ {
+ var provider = await CreateDisabledProviderAsync();
+
+ using (var scope = provider.CreateScope())
+ {
+ var sender = scope.ServiceProvider.GetRequiredService();
+ await Assert.ThrowsAsync(() =>
+ sender.ScheduleDispatches((IEnumerable)null!, DateTimeOffset.UtcNow.AddDays(1)));
+ }
+
+ await provider.SimulateStopHost(CancellationToken.None);
+ }
+
private void GivenIsolationKeyInMetadata(string isolationKey)
{
var appProperties = new Dictionary { { UserProperties.IsolationKey , isolationKey } };
@@ -601,6 +754,24 @@ private ServiceBusMessage GetMessageFrom(string clientToCheck)
return _sentMessagesToQueue.FirstOrDefault();
}
+ private static async Task CreateDisabledProviderAsync()
+ {
+ var services = new ServiceCollection();
+ services.AddServiceBus(settings =>
+ {
+ settings.Enabled = false;
+ settings.WithConnection("Endpoint=testConnectionString;", new ServiceBusClientOptions());
+ });
+ services.OverrideClientFactory();
+ services.RegisterServiceBusDispatch().ToQueue("myQueue", builder =>
+ {
+ builder.RegisterDispatch();
+ });
+ var provider = services.BuildServiceProvider();
+ await provider.SimulateStartHost(CancellationToken.None);
+ return provider;
+ }
+
public void Dispose()
{
_composer?.Dispose();