AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore
9.2.0
dotnet add package AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore --version 9.2.0
NuGet\Install-Package AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore -Version 9.2.0
<PackageReference Include="AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore" Version="9.2.0" />
paket add AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore --version 9.2.0
#r "nuget: AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore, 9.2.0"
// Install AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore as a Cake Addin #addin nuget:?package=AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore&version=9.2.0 // Install AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore as a Cake Tool #tool nuget:?package=AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore&version=9.2.0
AdaskoTheBeAsT.MediatR.SimpleInjector and AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore
MediatR extensions for SimpleInjector.
Badges
Usage in AspNetCore
Scans assemblies and adds handlers, preprocessors, and postprocessors implementations to the SimpleInjector container. Additionally it register decorator which passes HttpContext.RequestAborted cancellation token from asp.net core controllers to MediatR.
Install package AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore
.
There are few options to use with Container
instance:
Marker type from assembly which will be scanned
container.AddMediatRAspNetCore(typeof(MyHandler), type2 /*, ...*/);
Assembly which will be scanned
container.AddMediatRAspNetCore(assembly, assembly2 /*, ...*/);
Full configuration
var testMediator = new Mock<IMediator>(); container.AddMediatR( cfg => { cfg.Using(() => testMediator.Object); cfg.WithHandlerAssemblyMarkerTypes(typeof(MyMarkerType)); cfg.UsingBuiltinPipelineProcessorBehaviors(true); cfg.UsingPipelineProcessorBehaviors(typeof(CustomPipelineBehavior<,>)); cfg.UsingStreamPipelineBehaviors(typeof(CustomStreamPipelineBehavior<,>)); });
Usage in other project types
Scans assemblies and adds handlers, preprocessors, and postprocessors implementations to the SimpleInjector container.
Install package AdaskoTheBeAsT.MediatR.SimpleInjector
.
There are few options to use with Container
instance:
Marker type from assembly which will be scanned
container.AddMediatR(typeof(MyHandler), type2 /*, ...*/);
List of assemblies which will be scanned.
Below is sample for scanning assemblies from some solution.
[ExcludeFromCodeCoverage] public static class MediatRConfigurator { private const string NamespacePrefix = "YourNamespace"; public static void Configure(Container container) { var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList(); var assemblies = new List<Assembly>(); var mainAssembly = typeof(MediatRConfigurator).GetTypeInfo().Assembly; var refAssemblies = mainAssembly.GetReferencedAssemblies(); foreach (var assemblyName in refAssemblies .Where(a => a.FullName.StartsWith(NamespacePrefix, StringComparison.OrdinalIgnoreCase))) { var assembly = loadedAssemblies.Find(l => l.FullName == assemblyName.FullName) ?? AppDomain.CurrentDomain.Load(assemblyName); assemblies.Add(assembly); } container.AddMediatR(assemblies); } }
This will register:
IMediator
as SingletonIRequestHandler<>
concrete implementations as TransientINotificationHandler<>
concrete implementations as TransientIStreamRequestHandler<>
concrete implementations as Transient
Advanced usage
Setting up custom IMediator
instance and marker type from assembly for unit testing (Moq sample)
var testMediator = new Mock<IMediator>();
container.AddMediatR(
cfg =>
{
cfg.Using(() => testMediator.Object);
cfg.WithHandlerAssemblyMarkerTypes(typeof(MyMarkerType));
});
Setting up custom IMediator
implementation and marker type from assembly
container.AddMediatR(
cfg =>
{
cfg.Using<MyCustomMediator>();
cfg.WithHandlerAssemblyMarkerTypes(typeof(MyMarkerType));
});
Setting up custom IMediator
implementation and assemblies to scan
container.AddMediatR(
cfg =>
{
cfg.Using<MyCustomMediator>();
cfg.WithAssembliesToScan(assemblies);
});
Setting assemblies to scan and different lifetime for IMediator implementation
container.AddMediatR(
cfg =>
{
cfg.WithAssembliesToScan(assemblies);
cfg.AsScoped();
});
Setting assemblies to scan and additionally enabling all builtin behaviors and user defined processors/handlers
This will register following behaviors:
RequestPreProcessorBehavior<,>
RequestPostProcessorBehavior<,>
RequestExceptionProcessorBehavior<,>
RequestExceptionActionProcessorBehavior<,>
and all user defined implementation of processors and handlers:
IRequestPreProcessor<>
IRequestPostProcessor<,>
IRequestExceptionHandler<,,>
IRequestExceptionActionHandler<,>
container.AddMediatR( cfg => { cfg.WithAssembliesToScan(assemblies); cfg.UsingBuiltinPipelineProcessorBehaviors(true); });
Setting assemblies to scan and additionally enabling chosen builtin behaviors and user defined processors/handlers
This will register following behaviors:
RequestPreProcessorBehavior<,>
RequestExceptionProcessorBehavior<,>
and all user defined implementation of processors and handlers:
IRequestPreProcessor<>
IRequestExceptionHandler<,,>
container.AddMediatR( cfg => { cfg.WithAssembliesToScan(assemblies); cfg.UsingBuiltinPipelineProcessorBehaviors( requestPreProcessorBehaviorEnabled: true, requestPostProcessorBehaviorEnabled: false, requestExceptionProcessorBehaviorEnabled: true, requestExceptionActionProcessorBehaviorEnabled: false); });
Setting assemblies to scan and additionally custom stream request handlers behaviors
This will register following stream behaviors:
CustomStreamPipelineBehavior<,>
container.AddMediatR( cfg => { cfg.WithAssembliesToScan(assemblies); cfg.UsingStreamPipelineBehaviors(typeof(CustomStreamPipelineBehavior<,>)); });
Setting assemblies to scan and additionally enabling chosen builtin behaviors and user defined processors/handlers also with custom Pipeline Process Behaviors
container.AddMediatR(
cfg =>
{
cfg.WithAssembliesToScan(assemblies);
cfg.UsingBuiltinPipelineProcessorBehaviors(
requestPreProcessorBehaviorEnabled: true,
requestPostProcessorBehaviorEnabled: false,
requestExceptionProcessorBehaviorEnabled: true,
requestExceptionActionProcessorBehaviorEnabled: false);
cfg.UsingPipelineProcessorBehaviors(typeof(CustomPipelineBehavior<,>));
cfg.WithRequestPreProcessorTypes(typeof(FirstRequestPreProcessor<>), typeof(SecondRequestPreProcessor<>));
cfg.WithRequestPostProcessorTypes(typeof(FirstRequestPostProcessor<,>), typeof(SecondRequestPostProcessor<,>));
cfg.WithRequestExceptionProcessorTypes(typeof(FirstRequestExceptionProcessor<,,>), typeof(SecondRequestExceptionProcessor<,,>));
cfg.WithRequestExceptionActionProcessorTypes(typeof(FirstRequestExceptionActionProcessor<,>), typeof(SecondRequestExceptionActionProcessor<,>));
});
Setting assemblies to scan and additionally enabling chosen builtin behaviors and processors with specific order
Setting assemblies to scan and set WithNotificationPublisherForeachAwait NotificationPublisher
container.AddMediatR(
cfg =>
{
cfg.WithAssembliesToScan(assemblies);
cfg.WithNotificationPublisherForeachAwait();
});
``
### Setting assemblies to scan and set TaskWhenAllPublisher NotificationPublisher
```cs
container.AddMediatR(
cfg =>
{
cfg.WithAssembliesToScan(assemblies);
cfg.WithNotificationPublisherTaskWhenAll();
});
Setting assemblies to scan and set custom NotificationPublisher
container.AddMediatR(
cfg =>
{
cfg.WithAssembliesToScan(assemblies);
cfg.WithNotificationPublisherCustom<CustomNotificationPublisher>();
});
Thanks to
- Jimmy Boggard for MediatR
- Steven van Deursen for SimpleInjector
- Sebastian Kleinschmager for idea of automatic passing RequestAborted to MediatR
- Konrad Rudolph for idea of IsAssignableToGenericType
Code originates from MediatR.Extensions.Microsoft.DependencyInjection and was changed to work with SimpleInjector.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 9.2.0)
-
net7.0
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 9.2.0)
-
net8.0
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 9.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
9.2.0 | 246 | 8/18/2024 |
9.0.3 | 188 | 5/27/2024 |
9.0.2 | 225 | 2/18/2024 |
9.0.1 | 159 | 1/27/2024 |
9.0.0 | 246 | 12/2/2023 |
8.2.0 | 6,485 | 7/16/2023 |
8.1.0 | 216 | 5/4/2023 |
8.0.0 | 277 | 2/17/2023 |
7.1.0 | 325 | 1/22/2023 |
7.0.0 | 399 | 11/13/2022 |
6.0.0 | 485 | 10/23/2022 |
5.1.0 | 477 | 7/24/2022 |
5.0.1 | 967 | 2/8/2022 |
5.0.0 | 527 | 1/10/2022 |
4.2.2 | 686 | 7/24/2021 |
4.2.1 | 383 | 6/27/2021 |
4.2.0 | 444 | 3/7/2021 |
4.1.1 | 470 | 1/16/2021 |
4.1.0 | 481 | 12/16/2020 |
4.0.1 | 514 | 11/29/2020 |
4.0.0 | 445 | 11/11/2020 |
3.1.0 | 486 | 10/25/2020 |
3.0.1 | 592 | 10/16/2020 |
3.0.0 | 496 | 10/10/2020 |
2.2.0 | 498 | 10/7/2020 |
2.1.0 | 482 | 8/1/2020 |
2.0.6 | 548 | 7/25/2020 |
2.0.5 | 505 | 7/14/2020 |
2.0.3 | 505 | 7/2/2020 |
2.0.2 | 580 | 6/16/2020 |
2.0.0 | 546 | 6/14/2020 |
1.4.3 | 569 | 5/20/2020 |
1.4.2 | 527 | 4/21/2020 |
1.4.1 | 565 | 3/7/2020 |
1.4.0 | 562 | 3/1/2020 |
1.3.2 | 508 | 2/27/2020 |
1.3.0 | 575 | 2/23/2020 |
- added ability to order RequestPreProcessors, RequestPostProcessors, RequestExceptionHandlers, RequestExceptionActions