2012-09-26 4 views
10

Ho cablato con successo Autofac nel mio progetto WebAPI ASP.NET, e ora mi chiedo come essere in grado di risolvere i servizi nel mio MessageHandlers.Posso usare Autofac DI in un messaggio WebAPI message?

Come MessageHandlers deve essere aggiunto all'avvio dell'applicazione, è chiaro che non sarà in grado di risolverli in un ambito di validità della richiesta. Nessun problema qui.

Tuttavia, vorrei trovare un modo per ottenere l'ambito di validità della richiesta corrente durante l'esecuzione del metodo SendAsync di MessageHandler, per poter (ad esempio) eseguire la verifica del token, accedere ad un repository, ecc ...

Come devo fare?

risposta

17

È possibile utilizzare il metodo GetDependencyScope() estensione sul HttpRequestMessage che vi dà un IDependencyScope da dove si può risolvere qualsiasi servizio che si desidera in voi gestore:

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

Grazie. Era così semplice ... -_- 'Quasi mi vergogno. – Eilistraee

+0

Ancora, non vorrei usare il resolver nella directory del gestore di messaggi. Invece, vorrei registrare una fabbrica in grado di trasformare un HttpRequestMessage nel servizio desiderato e iniettarlo nel contructor del gestore. –