2012-09-26 11 views
10

ich verdrahtet erfolgreich Autofac in meinem ASP.NET WebAPI Projekt, und jetzt bin ich frage mich, wie der Lage sein, Dienste in meinem MessageHandlers zu lösen.Kann ich Autofac DI in einem WebAPI messageHandler verwenden?

Als MessageHandlers beim Start der Anwendung hinzugefügt werden muß, ist es klar, dass ich nicht in der Lage sein, sie Umfang in einer Anfrage Lebensdauer zu lösen. Kein Problem hier.

Aber ich möchte einen Weg zu finden, die aktuelle Anforderung Lebensdauer Umfang während der Ausführung des SendAsync Methode der Message zu bekommen, um (zum Beispiel) in der Lage sein Token-Verifizierungs ausführen, in einem Repository anmelden, etc ...

Wie soll ich das tun?

Antwort

17

können Sie die GetDependencyScope() Erweiterung verwenden Methode auf dem HttpRequestMessage, die Ihnen eine IDependencyScope von wo gibt Ihnen einen Dienst beheben, die Sie in Sie Handler wollen:

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

Danke. Es war so einfach ... "" Ich fühle mich fast schämen. – Eilistraee

+0

Trotzdem möchte ich den Resolver nicht im Message-Handler-Verzeichnis verwenden. Stattdessen würde ich eine Fabrik registrieren, die eine HttpRequestMessage in den gewünschten Dienst und injiziert, dass in den contructor des Handlers drehen kann. –

Verwandte Themen