Castle Windsor - 拦截方法并将其投射到Action类

时间:2016-04-19 14:47:45

标签: c# castle-windsor interceptor

如何将方法调用转换为Action类,包括其参数?它甚至可能吗?

Queue<Action> queue = new Queue<Action>();

要拦截的样本方法:

public string DoSomeStuff(string[] arr)
{
    //some logic here
}
拦截器(温莎城堡):

public class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        if (queue.Count > 0)
        {
            queue.Enqueue(() => {
                 //here, add intercepted method (DoSomeStuff) and its parameters
            });
        }                
    }
}

1 个答案:

答案 0 :(得分:1)

排队是直截了当的:

public void Intercept(IInvocation invocation)
{
    queue.Enqueue(invocation.Proceed);
    ...
}

但这是毫无意义的,因为在从Intercept()方法返回之前,您必须等到委托出列并调用。