在Castle Dynamic Proxy拦截器中检查是否为特定属性调用了

时间:2017-08-28 10:39:23

标签: c# castle castle-dynamicproxy

我有以下拦截器。虽然它完成了我打算为我当前的用例做的事情。我发现使用的方法有点hacky,并想知道是否有更好的方法来做到这一点。

public class Interceptor<TEntity, TProperty> : IInterceptor
{
    private readonly Expression<Func<TEntity, TProperty>> _propertySelector;

    public Interceptor(Expression<Func<TEntity, TProperty>> propertySelector)
    {
        _propertySelector = propertySelector;
    }

    public void Intercept(IInvocation invocation)
    {
        var invocatedMethod = invocation.Method.Name;
        var selectedMethod = (_propertySelector.Body as MemberExpression)?.Member.Name;
        if (invocatedMethod == $"set_{selectedMethod}")
        {
            //do stuff...
        }
        invocation.Proceed();
    }
}

我只需截取指定属性的更改。

待改进: - 此拦截器拦截所有方法和属性调用,仅在某种情况下执行操作。这听起来有点矫枉过正。 - 我需要比较两个有点相似的字符串...这听起来不是正确的做法。

1 个答案:

答案 0 :(得分:0)

您可以使用IProxyGenerationHook来控制拦截哪些成员。

StackOverflow question有一个摘要以及this article,其中包含IProxyGenerationHook的详细信息。