Loupe

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

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus