AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet
8.2.0
See the version list below for details.
dotnet add package AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet --version 8.2.0
NuGet\Install-Package AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet -Version 8.2.0
<PackageReference Include="AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet" Version="8.2.0" />
paket add AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet --version 8.2.0
#r "nuget: AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet, 8.2.0"
// Install AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet as a Cake Addin #addin nuget:?package=AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet&version=8.2.0 // Install AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet as a Cake Tool #tool nuget:?package=AdaskoTheBeAsT.MediatR.SimpleInjector.AspNet&version=8.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 Framework | net462 is compatible. net463 was computed. net47 is compatible. net471 is compatible. net472 is compatible. net48 is compatible. net481 is compatible. |
-
.NETFramework 4.6.2
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.2.0)
-
.NETFramework 4.7
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.2.0)
-
.NETFramework 4.7.1
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.2.0)
-
.NETFramework 4.7.2
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.2.0)
-
.NETFramework 4.8
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.2.0)
-
.NETFramework 4.8.1
- AdaskoTheBeAsT.MediatR.SimpleInjector (>= 8.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 | 236 | 8/18/2024 |
9.0.3 | 100 | 5/27/2024 |
9.0.2 | 151 | 2/18/2024 |
9.0.1 | 132 | 1/27/2024 |
9.0.0 | 235 | 12/2/2023 |
8.2.0 | 203 | 7/16/2023 |
8.1.0 | 168 | 5/4/2023 |
8.0.0 | 246 | 2/17/2023 |
4.2.2 | 3,801 | 7/24/2021 |
4.2.1 | 368 | 6/27/2021 |
4.2.0 | 415 | 3/7/2021 |
4.1.1 | 463 | 1/16/2021 |
4.1.0 | 440 | 12/16/2020 |
4.0.1 | 510 | 11/29/2020 |
4.0.0 | 454 | 11/11/2020 |
3.1.0 | 476 | 10/25/2020 |
3.0.1 | 512 | 10/16/2020 |
3.0.0 | 531 | 10/10/2020 |
2.2.0 | 511 | 10/7/2020 |
2.1.0 | 481 | 8/1/2020 |
2.0.6 | 541 | 7/25/2020 |
2.0.5 | 462 | 7/14/2020 |
2.0.3 | 493 | 7/2/2020 |
2.0.2 | 587 | 6/16/2020 |
- added ability to order RequestPreProcessors, RequestPostProcessors, RequestExceptionHandlers, RequestExceptionActions