webapi unity tutorial net mvc injection dependency asp c# asp.net-web-api dependency-injection ioc-container asp.net-web-api-filters

c# - tutorial - web api 2 unity dependency injection



Cómo realizar la inyección de dependencia al filtro de acción en la API web de ASP.NET (3)

Necesita verificar su implementación específica de IOC. Los contenedores IOC, como NInject y Autofac, tienen algún tipo de inyección de filtro al inyectar propiedades públicas. Windsor no estoy seguro, pero aquí hay un enlace que crea un envoltorio que podría ayudar con Windsor: http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-filters/ y otro artículo que trata el problema directamente con Windsor: http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx .

Para completar con NInject y Autofac:

Inyectar:

Autofac:

** EDITAR - opción adicional **

Debería poder realizar GlobalConfiguration.Configuration.DependencyResolver.GetService(...) desde cualquier filtro, independientemente del contenedor IOC que esté utilizando.

Realmente me quedo estancado en el enfoque para hacer la inyección de dependencia en el filtro de acción de la API web. Tengo un filtro de acción como este:

public class AuthorizationAttribute : ActionFilterAttribute { public IApiKeyRepository Repository { get; set; } private Guid GetApiKey(string customerKey) { return Repository.GetApiKey(customerKey); } public override void OnActionExecuting(HttpActionContext actionContext) { } }

Me gustaría hacer una inyección de propiedad en el Repositorio de propiedades utilizando Windsor (pero no importa qué contenedor IoC se use)

Llegué a personalizar FilterProvider pero no funcionó para mí. ¿Alguien tiene una solución o código de ejecución en esto? Será muy apreciada


Para WebAPI y AutoFac puedes usar:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

La documentación está here .


Puede usar el ensamblado Ninject.Web.WebApi (obviamente usando Ninject como IoC) para hacer que esto funcione. Sugeriría mirar la fuente y SampleApplication a través de https://github.com/ninject/Ninject.Web.WebApi para ver cómo están logrando la inyección del filtro.