【发布时间】:2015-04-29 05:17:45
【问题描述】:
我正在使用 Autofac.Extras.DynamicProxy2 对服务实现执行一些方法拦截。
该服务有很多方法,我只想针对一些。
除了根据我想要拦截的方法的批准字符串字典检查调用目标名称之外,还有更好的做法吗?
public void Intercept(IInvocation invocation)
{
invocation.Proceed();
if (ContinueIntercept(invocation))
{
// Do intercept work
}
}
private bool ContinueIntercept(IInvocation invocation)
{
// Logic to compare invocation.MethodInvocationTarget.Name
}
它确实不会增加太多开销,但它仍然是一种糟糕的方式。特别是因为将它添加到特定的服务实现意味着它将拦截基类公共实现的所有方法调用。如果只拦截派生类就不会那么糟糕了。
我看到 Castle.DynamicProxy2 可以指定调用目标,但我不知道如何将其与 autofac 连接起来。
【问题讨论】:
-
我没试过,但是docs 说“类拦截要求被拦截的方法是虚拟的,因为它使用子类作为代理技术。”,所以你可以尝试删除虚拟修饰符。
标签: c# aop autofac interceptor castle-dynamicproxy