Skip to content

Instantly share code, notes, and snippets.

@benjaminvanrenterghem
Created September 17, 2022 00:09
Show Gist options
  • Save benjaminvanrenterghem/e70f512eb0542deaed9e2e0bd3e7914f to your computer and use it in GitHub Desktop.
Save benjaminvanrenterghem/e70f512eb0542deaed9e2e0bd3e7914f to your computer and use it in GitHub Desktop.
LoggingBehavior
// [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