使用运行时构造函数参数的InheritanceBasedAopConfigurer

时间:2010-11-05 14:17:29

标签: c# spring.net

我有一个由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来说是一个错误的用例吗?

0 个答案:

没有答案