【发布时间】:2014-01-21 03:07:28
【问题描述】:
我在使用 Spring.Net 的 AOP 时遇到问题。如果给定的方法是从基类继承的方法,拦截器似乎不会触发。
但是,如果我重写从基类继承的方法,拦截器就会触发。
有没有办法让拦截器在不覆盖基地的情况下开火?
这是我目前所拥有的:(this example 的修改版):
public class HomeController : BaseController
{
//**Uncommenting this will work**
//public override void Delete()
//{
// base.Delete();
//}
}
public class BaseController : Controller
{
[SetMethodInfoAsMessage]
public virtual void Delete()
{
}
}
public class SetMethodInfoAsMessageAdvice : IMethodBeforeAdvice
{
public void Before(MethodInfo method, object[] args, object target)
{
//Do something
}
}
public class SetMethodInfoAsMessageAttribute : Attribute
{
}
使用以下配置:
<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net"
xmlns:aop="http://www.springframework.net/aop" >
<!-- Controllers -->
<object type="MyApp.Controllers.HomeController, MyApp" singleton="false" />
<!-- Aop -->
<object id="myInterceptor" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="Attribute" value="MyApp.Controllers.SetMethodInfoAsMessageAttribute, MyApp" />
<property name="Advice">
<object type="MyApp.Controllers.SetMethodInfoAsMessageAdvice, MyApp" />
</property>
</object>
<object type="Spring.Aop.Framework.AutoProxy.InheritanceBasedAopConfigurer, Spring.Aop">
<property name="ObjectNames">
<list>
<value>*Controller*</value>
</list>
</property>
<property name="InterceptorNames">
<list>
<value>myInterceptor</value>
</list>
</property>
</object>
</objects>
【问题讨论】:
标签: c# asp.net-mvc inheritance aop spring.net