如何从 Ninject 拦截器中 return 一些东西

how to return something from a Ninject Interceptor

我已经编写了一个通用验证器作为 Ninject 拦截器的一部分。为了保持一致性,我的要求是我必须 return 一个响应对象,就像我项目中的任何服务方法 return 一样。通过 returning 响应对象还可以帮助我在验证器失败时发回适当的验证消息。我如何在拦截器中做到这一点?我明白 Intercept() return 没什么。我试着抛出一个异常,但我不知道在哪里捕捉它。有人可以帮助我吗?

public void Intercept(IInvocation invocation)
    {
        var validationFails = false;

        if (validationFails)
        {
            // return an object
            // response.ErrorMessage = "Validation Error"

            // Or throw exception, but where should I catch it
            throw new Exception(statusMessage);
        }
        else
        {
            invocation.Proceed();
        }
    }

分配 ReturnValue,验证失败时不调用 Proceed。

public class MyRequestHandler
{
   Response ProcessRequest(string input) { return new Response(); }
}

public MyValidationInterceptor : IInterceptor 
{
    public void Intercept( IInvocation invocation )
    {
        if (NeedsValidation(invocation.Method) && 
            !IsValidRequest((string)invocation.Arguments[0]))
        {
            invocation.ReturnValue =
                              new Response { ErrorMessage = "Validation Error" };
            return;
        }

        invocation.Proceed();
    }
}

我不得不将我的拦截器连接到业务层方法,而不是服务方法,并且能够return正确的return值作为我响应的一部分。