我可以成功地将依赖项注入到我的ServiceStack服务中,但现在我需要将依赖项注入请求过滤器。但是,这似乎没有同样的方式。
这是我的过滤器(它只是检查源IP是否在批准列表中;这是我试图注入的列表):
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;
}
}
}
这就是我的global.asax中的内容:
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);
_IPAddresses始终为空。
我想我必须遗漏一些基本的东西。有没有更好的方法来解决这个问题?
答案 0 :(得分:4)
对过滤器属性使用属性注入而不是构造函数注入,因为它们是克隆的,并且公共属性是自动连接的,而不是像从IOC实例化并自动连接的其他所有内容一样创建。