Created
September 17, 2022 00:09
-
-
Save benjaminvanrenterghem/e70f512eb0542deaed9e2e0bd3e7914f to your computer and use it in GitHub Desktop.
LoggingBehavior
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// [i] Bestand terug te vinden onder project Logic.Behaviors | |
// #1 De interface IPipelineBehavior wordt geimplementeerd (de Handle functie ontwikkelen wordt verplicht) | |
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> | |
// #2 Net zoals in ValidationBehavior verduidelijken we onze generieke type parameters door middel van where | |
// Argument 1 is de IRequest zoals we vooraf gezien hebben in hoofdstuk 2.3 (CQRS) | |
// Argument 2 definieert dat we een Response object gaan retourneren, deze bevat de Content property | |
// tesamen met andere properties die betrekking houden tot de uitkomst van ons verzoek, eventuele foutmeldingen, etc | |
where TRequest : IRequest<TResponse> | |
where TResponse : Response, new() | |
{ | |
private readonly ILogger<LoggingBehavior<TRequest, TResponse>> _logger; | |
// #3 Middels Dependency Injection ontvangen we een ILogger instantie, welke we instellen bij het bovenstaande _logger veld | |
public LoggingBehavior(ILogger<LoggingBehavior<TRequest, TResponse>> logger) { | |
_logger = logger; | |
} | |
// #4 Hier komt de logica terecht welke uitgevoerd wordt op het moment dat het aan onze beurt is om de IRequest te behandelen | |
public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next) { | |
// #5 In ons geval loggen we louter de naam van het type dat passeert | |
_logger.LogInformation($"Handling {typeof(TRequest).Name}"); | |
// #6 Door middel van de next() functie kunnen we de IRequest releasen waarna hij verder door de Pipeline traverseert | |
// In dit geval wensen we ook de response nog onder ogen te krijgen, dus awaiten we het resultaat | |
var response = await next(); | |
// #7 Nadat een andere PipelineBehavior, of de uiteindelijke handler, een response retourneert loggen we nogmaals het type | |
_logger.LogInformation($"Handled {typeof(TResponse).Name}"); | |
// #8 Als laatste releasen we de response | |
return response; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment