我有一个由Spring.NET上下文拥有的(原型)类,使用带有运行时构造函数参数的AutoProxy创建。它被实例化为这样。
var context = ContextRegistry.GetContext();
var myClass = context.GetObject("myclass", new object[]{ myRuntimeConstructorArgument }) as MyClass;
这个类有一些内部逻辑,它捕获一个由类方法处理的事件,如下所示:
// MyClass owned by Spring.NET context
public class MyClass {
// InnerObject not owned by Spring context
private InnerObject innerobject;
// argument object not owned by Spring context
public MyClass(ObjectNotOwnedBySpring myRuntimeConstructorArgument) {
...
this.innerobject = new InnerObject();
this.innerobject.SomeEvent += this.handleSomeEvent;
}
// I would like to intercept this event handler
public virtual void handleMyEvent (object sender, EventArgs args)
{
// do stuff
}
}
我试图通过拦截handleMyEvent方法来使用AOP来删除抽象泄漏(由外部组件中的错误引起)。因为Spring.Aop使用基于代理的方法来拦截方法调用,所以内部方法调用不会被截获。我得到那个部分。
如果我正确理解documentation,那么 InheritanceBasedAopConfigurer 就会发挥作用,使用基于'true'继承的AOP机制。来自文档:
在调用基类方法之前,直接在方法体中添加拦截建议。
正是我需要的!
不幸的是,我无法让InheritanceBasedAopConfigurer与运行时构造函数参数很好地协同工作:
Spring.Objects.Factory.ObjectCreationException:创建名为“myclass”>的对象时出错在'file [spring-aop-config.xml]第36行'中定义:无法解析匹配的构造函数。
InheritanceBasedAopConfigurer不支持运行时构造函数参数吗?或者这对于InheritanceBasedAopConfigurer来说是一个错误的用例吗?