Skip to content

Commit 32b512e

Browse files
committed
Make auto registration of generic handlers opt in.
1 parent 6abee0c commit 32b512e

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

src/MediatR/MicrosoftExtensionsDI/MediatrServiceConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public class MediatRServiceConfiguration
9292
/// <summary>
9393
/// Flag that controlls whether MediatR will attempt to register handlers that containg generic type parameters.
9494
/// </summary>
95-
public bool RegisterGenericHandlers { get; set; } = true;
95+
public bool RegisterGenericHandlers { get; set; } = false;
9696

9797
/// <summary>
9898
/// Register various handlers from assembly containing given type

test/MediatR.Tests/GenericRequestHandlerTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public void ShouldResolveAllCombinationsOfGenericHandler(int numberOfClasses, in
3232
services.AddMediatR(cfg =>
3333
{
3434
cfg.RegisterServicesFromAssemblies(dynamicAssembly);
35+
cfg.RegisterGenericHandlers = true;
3536
});
3637

3738
var provider = services.BuildServiceProvider();
@@ -106,6 +107,7 @@ public void ShouldThrowExceptionWhenTypesClosingExceedsMaximum()
106107
services.AddMediatR(cfg =>
107108
{
108109
cfg.RegisterServicesFromAssembly(assembly);
110+
cfg.RegisterGenericHandlers = true;
109111
});
110112
})
111113
.Message.ShouldContain("One of the generic type parameter's count of types that can close exceeds the maximum length allowed");
@@ -124,6 +126,7 @@ public void ShouldThrowExceptionWhenGenericHandlerRegistrationsExceedsMaximum()
124126
services.AddMediatR(cfg =>
125127
{
126128
cfg.RegisterServicesFromAssembly(assembly);
129+
cfg.RegisterGenericHandlers = true;
127130
});
128131
})
129132
.Message.ShouldContain("The total number of generic type registrations exceeds the maximum allowed");
@@ -142,6 +145,7 @@ public void ShouldThrowExceptionWhenGenericTypeParametersExceedsMaximum()
142145
services.AddMediatR(cfg =>
143146
{
144147
cfg.RegisterServicesFromAssembly(assembly);
148+
cfg.RegisterGenericHandlers = true;
145149
});
146150
})
147151
.Message.ShouldContain("The number of generic type parameters exceeds the maximum allowed");
@@ -163,6 +167,7 @@ public void ShouldThrowExceptionWhenTimeoutOccurs()
163167
cfg.MaxGenericTypeRegistrations = 0;
164168
cfg.MaxTypesClosing = 0;
165169
cfg.RegistrationTimeout = 1000;
170+
cfg.RegisterGenericHandlers = true;
166171
cfg.RegisterServicesFromAssembly(assembly);
167172
});
168173
})

test/MediatR.Tests/MicrosoftExtensionsDI/AssemblyResolutionTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ public AssemblyResolutionTests()
1515
{
1616
IServiceCollection services = new ServiceCollection();
1717
services.AddSingleton(new Logger());
18-
services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Ping).Assembly));
18+
services.AddMediatR(cfg =>
19+
{
20+
cfg.RegisterServicesFromAssembly(typeof(Ping).Assembly);
21+
cfg.RegisterGenericHandlers = true;
22+
});
1923
_provider = services.BuildServiceProvider();
2024
}
2125

test/MediatR.Tests/SendTests.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ public SendTests()
1818
{
1919
_dependency = new Dependency();
2020
var services = new ServiceCollection();
21-
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(typeof(Ping).Assembly));
21+
services.AddMediatR(cfg =>
22+
{
23+
cfg.RegisterServicesFromAssemblies(typeof(Ping).Assembly);
24+
cfg.RegisterGenericHandlers = true;
25+
});
2226
services.AddSingleton(_dependency);
2327
_serviceProvider = services.BuildServiceProvider();
2428
_mediator = _serviceProvider.GetService<IMediator>()!;
@@ -248,8 +252,13 @@ public async Task Should_resolve_closed_handler_if_defined()
248252
{
249253
var dependency = new Dependency();
250254
var services = new ServiceCollection();
251-
services.AddSingleton(dependency);
252-
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));
255+
services.AddSingleton(dependency);
256+
services.AddMediatR(cfg =>
257+
{
258+
cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly());
259+
cfg.RegisterGenericHandlers = true;
260+
});
261+
253262
services.AddTransient<IRequestHandler<VoidGenericPing<PongExtension>>,TestClass1PingRequestHandler>();
254263
var serviceProvider = services.BuildServiceProvider();
255264
var mediator = serviceProvider.GetService<IMediator>()!;
@@ -267,7 +276,11 @@ public async Task Should_resolve_open_handler_if_not_defined()
267276
var dependency = new Dependency();
268277
var services = new ServiceCollection();
269278
services.AddSingleton(dependency);
270-
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));
279+
services.AddMediatR(cfg =>
280+
{
281+
cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly());
282+
cfg.RegisterGenericHandlers = true;
283+
});
271284
services.AddTransient<IRequestHandler<VoidGenericPing<PongExtension>>, TestClass1PingRequestHandler>();
272285
var serviceProvider = services.BuildServiceProvider();
273286
var mediator = serviceProvider.GetService<IMediator>()!;

0 commit comments

Comments
 (0)