2012-09-26 47 views
10

我成功地在我的ASP.NET WebAPI項目中連接了Autofac,現在我想知道如何能夠解決MessageHandlers中的服務問題。我可以在WebAPI messageHandler中使用Autofac DI嗎?

由於必須在應用程序啓動時添加MessageHandlers,很明顯我無法在請求生命週期範圍內解決它們。這裏沒問題。

但是,我想找到一種方法來在執行MessageHandler的SendAsync方法期間獲取當前請求生存期範圍,以便能夠(例如)執行令牌驗證,登錄存儲庫, etc ...

我該怎麼做?

回答

17

您可以使用在HttpRequestMessageGetDependencyScope()擴展方法,讓你從那裏你可以解決你在你的處理程序所需的任何服務的IDependencyScope

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

謝謝。它就這麼簡單...... -_-「我幾乎感到慚愧。 – Eilistraee

+0

不過,我不想在消息處理程序目錄中使用解析器。相反,我會註冊一個工廠,它可以將HttpRequestMessage轉換爲所需的服務並將其注入處理程序的構造器。 –

相關問題