tag route net mvc for español data asp all asp.net-mvc dependency-injection castle-windsor

asp.net-mvc - route - tag helper asp net core 2



¿Cómo uso Windsor para inyectar dependencias en ActionFilterAttributes? (2)

Cree un atributo genérico: MyFilterAttribute con ctor tomando un tipo como argumento, es decir, algo como esto:

public class MyFilterAttribute : ActionFilterAttribute { public MyFilterAttribute(Type serviceType) { this.serviceType = serviceType; } public override void OnActionExecuting(FilterExecutingContext c) { Container.Resolve<IFilterService>(serviceType).OnActionExecuting(c); // alternatively swap c with some context defined by you } // (...) action executed implemented analogously public Type ServiceType { get { return serviceType; } } public IWindsorContainer Container { set; get; } }

Luego use el mismo enfoque que los dos artículos a los que se refiere, para controlar cómo se invocan las acciones, y realice una inyección manual de su WindsorContainer en el atributo.

Uso: [MyFilter (typeof (IMyFilterService))]

Su filtro real estará entonces en una clase implementando IMyFilterService que a su vez debería implementar IFilterService que podría verse más o menos así:

public interface IFilterService { void ActionExecuting(ActionExecutingContext c); void ActionExecuted(ActionExecutedContext c); }

De esta forma, su filtro ni siquiera estará vinculado a ASP.NET MVC, y su atributo no es más que una pieza de metadatos, ¡como se supone que debería ser! :-)

Después de haber visto cómo NInject puede hacerlo y AutoFac puede hacerlo, estoy tratando de descubrir cómo inyectar dependencias en MVC ActionFilters usando Castle Windsor.

Por el momento estoy usando una fea clase IoC helper para resolver las dependencias del código del constructor como este:

public class MyFilterAttribute : ActionFilterAttribute { private readonly IUserRepository _userRepository; public MyFilterAttribute() : this(IoC.Resolve<IUserRepository>()) { } public MyFilterAttribute(IUserRepository userRepository) { _userRepository = userRepository; } }

Me encantaría eliminar de mis filtros esa antiestática antideslizante IoC.

¿Algún indicio de cómo iría a hacer eso con Castle Windsor?

Y no, cambiar el marco DI no es una opción.