Skip to content

Commit 1b346f2

Browse files
committed
fix: void requests
1 parent 450a41f commit 1b346f2

4 files changed

Lines changed: 50 additions & 4 deletions

File tree

src/Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project>
22

33
<PropertyGroup>
4-
<Version>1.0.0-alpha.18</Version>
5-
<PackageVersion>1.0.0-alpha.18</PackageVersion>
4+
<Version>1.0.0-alpha.19</Version>
5+
<PackageVersion>1.0.0-alpha.19</PackageVersion>
66
<Authors>Zapto</Authors>
77
<RepositoryUrl>https://github.com/zapto-dev/Mediator</RepositoryUrl>
88
<Copyright>Copyright © 2025 Zapto</Copyright>

src/Mediator.DependencyInjection/Generic/Handlers/GenericRequestHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public async ValueTask Handle(IServiceProvider provider, TRequest request, Cance
168168
foreach (var registration in _enumerable)
169169
{
170170
if (registration.RequestType != requestType ||
171-
registration.ResponseType != null)
171+
registration.ResponseType != typeof(Unit))
172172
{
173173
continue;
174174
}

src/Mediator.DependencyInjection/Generic/MediatorBuilder.RequestHandler.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ public IMediatorBuilder AddRequestHandler(
1818
_services.Add(new ServiceDescriptor(handlerType, handlerType, GetLifetime(scope)));
1919
_services.AddSingleton(new GenericRequestRegistration(requestType, responseType, handlerType));
2020
}
21+
else if (responseType == typeof(Unit))
22+
{
23+
_services.Add(new ServiceDescriptor(typeof(IRequestHandler<>).MakeGenericType(requestType), handlerType, GetLifetime(scope)));
24+
}
2125
else
2226
{
2327
_services.Add(new ServiceDescriptor(typeof(IRequestHandler<,>).MakeGenericType(requestType, responseType), handlerType, GetLifetime(scope)));
@@ -39,7 +43,7 @@ public IMediatorBuilder AddRequestHandler(Type handlerType, RegistrationScope sc
3943
{
4044
var args = type.GetGenericArguments();
4145
var requestType = type.GetGenericArguments()[0];
42-
var responseType = args.Length > 1 ? args[1] : null;
46+
var responseType = args.Length > 1 ? args[1] : typeof(Unit);
4347

4448
if (requestType.IsGenericType)
4549
{

tests/Mediator.DependencyInjection.Tests/RequestTest.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,46 @@ public async Task TestVoidRequest()
154154
_ = handler.Received()
155155
.Handle(Arg.Any<IServiceProvider>(), Arg.Any<VoidRequest>(), Arg.Any<CancellationToken>());
156156
}
157+
158+
private abstract class BaseRequestHandler<T> : IRequestHandler<T, int>
159+
where T : IRequest<int>
160+
{
161+
public ValueTask<int> Handle(IServiceProvider provider, T request, CancellationToken cancellationToken) => new(1);
162+
}
163+
164+
private class RequestHandler : BaseRequestHandler<Request>;
165+
166+
[Fact]
167+
public async Task TestBaseRequestHandler()
168+
{
169+
var serviceProvider = new ServiceCollection()
170+
.AddMediator(b => b.AddRequestHandler(typeof(RequestHandler)))
171+
.BuildServiceProvider();
172+
173+
var mediator = serviceProvider.GetRequiredService<IMediator>();
174+
175+
var result = await mediator.Send(new Request());
176+
177+
Assert.Equal(1, result);
178+
}
179+
180+
private abstract class BaseVoidRequestHandler<T> : IRequestHandler<T>
181+
where T : IRequest
182+
{
183+
public ValueTask Handle(IServiceProvider provider, T request, CancellationToken cancellationToken) => default;
184+
}
185+
186+
private class BaseVoidRequestHandler : BaseVoidRequestHandler<VoidRequest>;
187+
188+
[Fact]
189+
public async Task TestBaseVoidRequestHandler()
190+
{
191+
var serviceProvider = new ServiceCollection()
192+
.AddMediator(b => b.AddRequestHandler(typeof(BaseVoidRequestHandler)))
193+
.BuildServiceProvider();
194+
195+
var mediator = serviceProvider.GetRequiredService<IMediator>();
196+
197+
await mediator.Send(new VoidRequest());
198+
}
157199
}

0 commit comments

Comments
 (0)