2012-09-26 9 views
10

Conecté correctamente Autofac en mi proyecto ASP.NET WebAPI, y ahora me pregunto cómo poder resolver servicios en mis MessageHandlers.¿Puedo usar Autofac DI en un gestor de mensajes WebAPI?

Como MessageHandlers deben agregarse al inicio de la aplicación, está claro que no podré resolverlos en un ámbito de duración de solicitud. No hay problema aqui

Sin embargo, me gustaría encontrar una forma de obtener el alcance de vigencia de la solicitud actual durante la ejecución del método SendAsync de MessageHandler, para poder (por ejemplo) realizar verificación de tokens, iniciar sesión en un repositorio, etc ...

¿Cómo debo hacer eso?

Respuesta

17

Usted puede utilizar el método GetDependencyScope() extensión en el HttpRequestMessage que le da una IDependencyScope desde donde se puede resolver cualquier servicio que desea en ti manejador:

public class MyHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, 
     CancellationToken cancellationToken) 
    { 
     IMyService myservice = 
     (IMyService)request.GetDependencyScope().GetService(typeof(IMyService)); 
     // Do my stuff with myservice 
     return base.SendAsync(request, cancellationToken); 
    } 
} 
+0

Gracias. Fue tan simple como eso ... -_- 'Casi siento vergüenza. – Eilistraee

+0

Aún así, no me gustaría usar la resolución en el directorio del manejador de mensajes. En cambio, registraría una fábrica que puede convertir un HttpRequestMessage en el servicio deseado e inyectarlo en el contructor del controlador. –

Cuestiones relacionadas