2013-10-31 16 views
6

Tôi có thể tiêm phụ thuộc thành công vào các dịch vụ ServiceStack của mình nhưng bây giờ tôi cần phải đưa một phụ thuộc vào Bộ lọc yêu cầu. Tuy nhiên điều này dường như không hoạt động theo cùng một cách.Tôi có thể tiêm phụ thuộc vào Bộ lọc yêu cầu ServiceStack không?

Dưới đây là bộ lọc của tôi (nó chỉ đơn giản là kiểm tra xem IP nguồn là trong một danh sách đã được phê duyệt; nó là danh sách này, tôi đang cố gắng để tiêm):

public class CheckIPFilter : RequestFilterAttribute 
{ 
    private readonly IList<string> _IPAddresses = new List<string>(); 

    public CheckIPFilter() { } 

    public CheckIPFilter(IList<string> IPAddresses) 
    { 
     _IPAddresses = IPAddresses; 
    } 

    public override void Execute(ServiceStack.ServiceHost.IHttpRequest req, ServiceStack.ServiceHost.IHttpResponse res, object requestDto) 
    { 
     if (!_IPAddresses.Contains(req.UserHostAddress)) 
     { 
      var errResponse = DtoUtils.CreateErrorResponse("401", "Unauthorised", null); 
      var responseDto = DtoUtils.CreateResponseDto(requestDto, new ResponseStatus("401", "Unauthorised")); 
      var contentType = req.ResponseContentType; 
      var serializer = EndpointHost.AppHost.ContentTypeFilters.GetResponseSerializer(contentType); 
      res.ContentType = contentType; 

      var serializationContext = new HttpRequestContext(req, res, responseDto); 
      serializer(serializationContext, responseDto, res); 
      res.EndRequest(); //stops further execution of this request 

      return; 
     } 
    } 
} 

Đây là những gì trong global.asax của tôi:

var IPAddresses = new List<string>() 
    { "99.99.99.99", "99.99.99.99", "99.99.99.99", "99.99.99.99" }; 

container.Register<IList<string>>(IPAddresses); 

_IPĐịa chỉ luôn rỗng.

Tôi đoán tôi phải thiếu một số thứ cơ bản ở đây. Có cách nào tốt hơn để tiếp cận điều này?

Trả lời

4

Sử dụng tính năng tiêm thay vì khởi tạo bộ lọc cho thuộc tính lọc, vì chúng được nhân bản và thuộc tính công khai được tự động kết nối và không được tạo như mọi thứ khác được khởi tạo từ IOC và tự động có dây.

+0

Tuyệt vời, cảm ơn bạn. – Simon

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