6

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 は常に null です。

ここで基本的な何かが欠けているに違いないと思います。これにアプローチするより良い方法はありますか?

4

1 に答える 1

4

フィルター属性にはコンストラクター注入の代わりにプロパティ注入を使用します。これは、それらが複製され、パブリック プロパティが自動配線され、IOC からインスタンス化されて自動配線される他のすべてのように作成されないためです。

于 2013-10-31T19:43:42.830 に答える