2012-09-26 24 views
10

Tôi đã kết nối thành công Autofac trong dự án ASP.NET WebAPI của tôi, và bây giờ tôi tự hỏi làm thế nào để có thể giải quyết các dịch vụ trong MessageHandlers của tôi.Tôi có thể sử dụng Autofac DI trong một thông báo WebAPIHandler không?

Khi MessageHandlers phải được thêm vào lúc khởi động ứng dụng, rõ ràng là tôi sẽ không thể giải quyết chúng trong phạm vi thời gian yêu cầu. Không có vấn đề ở đây.

Tuy nhiên, tôi muốn tìm cách nhận phạm vi thời gian yêu cầu hiện tại trong khi thực hiện phương thức SendAsync của MessageHandler, để có thể (ví dụ) thực hiện xác minh mã thông báo, đăng nhập vào kho lưu trữ, v.v ...

Tôi nên làm như thế nào?

Trả lời

17

Bạn có thể sử dụng phương pháp GetDependencyScope() mở rộng trên HttpRequestMessage mang đến cho bạn một IDependencyScope từ nơi bạn có thể giải quyết bất kỳ dịch vụ mà bạn muốn trong bạn xử lý:

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

Cảm ơn bạn. Nó đơn giản như thế ... -_- 'Tôi gần như cảm thấy xấu hổ. – Eilistraee

+0

Tuy nhiên, tôi sẽ không muốn sử dụng trình phân giải trong thư mục xử lý thư. Thay vào đó, tôi sẽ đăng ký một nhà máy có thể biến một HttpRequestMessage thành dịch vụ mong muốn và tiêm nó vào trong contructor của trình xử lý. –

Các vấn đề liên quan