Injection de dépendances dans les filtres en ASP.NET Core 1
Les filtres d’action en ASP.NET sont présents depuis de nombreuses versions du Framework. Ils permettent de faire des traitements en amont ou en aval de l’exécution d’une méthode. Il existe 4 filtres d’action :
- Filtres d’autorisation : permettant de valider ou non l’accès à une méthode,
- Filtres d’action : permettant d’exécuter des traitements supplémentaires en amont de l’exécution d’une méthode,
- Filtres de résultat : permettant d’exécuter des traitements supplémentaires en aval de l’exécution d’une méthode,
- Filtres d’exception : permettant de modifier le comportement de l’application si une exception est levée (afficher une page précise, rediriger l’utilisateur, …).
En fonction du besoin, il peut être bon d’avoir accès à une couche de service, une couche d’accès aux données, …
Dans une application ASP.NET Core 1.0, avec une architecture basée sur l’injection de dépendances, les filtres doivent aussi pouvoir obtenir ces couches via injection de dépendance.
Comment faire ?
Création du filtre :
public class EventAuthorizationFilter : AuthorizationFilterAttribute { protected readonly IEventService EventService; public EventAuthorizationFilter(IEventService eventService) { EventService = eventService; } public override Task OnAuthorizationAsync(AuthorizationContext context) { // Traitements avec accès au service pour valider l'accès à la méthode return base.OnAuthorizationAsync(context); } }
Déclaration de l’injection dans la méthode ConfigureServices de la classe Startup de l’application Web ASP.NET Core 1.0 :
public void ConfigureServices(IServiceCollection services) { // Déclaration de l'injection du service services.AddScoped<IEventService, EventService>(); // Déclaration de l'injection du filtre services.AddScoped<EventAuthorizationFilter>(); services.AddMvc(option => { // Ajout du filtre sur les filtres de l'application option.Filters.AddService(typeof(EventAuthorizationFilter)); }); }
Avec l’utilisation de la méthode AddService, on ajoute le filtre sur l’application Web et grâce aux déclarations d’injection précisées au-dessus, le filtre et le service seront automatiquement résolus.
Bon code
Commentaires