温莎容器何时触发IKernel.瞬态组件的ComponentDestroyed事件

本文关键字:组件 ComponentDestroyed 事件 IKernel 何时触 | 更新日期: 2023-09-27 17:53:05

容器未触发事件。,则以下测试总是失败:

public void ComponentDestroyedEvent()
{
  var wasDestroyed = false;
  var container = new WindsorContainer()
    .Register(
      Component.For(typeof (Cat))
        .LifeStyle.Transient
        .OnCreate((k, instance) => {
          k.ComponentDestroyed += (model, component) => {
            if (component == instance)
              wasDestroyed = true;
          };
        }));

  var cat = container.Resolve<Cat>();
  container.Release(cat);
  Assert.True(wasDestroyed);
}

ComponentDestroyed事件何时触发?

温莎容器何时触发IKernel.瞬态组件的ComponentDestroyed事件

Mauricio是对的——这个组件没有触发事件,因为该组件没有被跟踪,而且Windsor无论如何也不会与它有任何关系。

如果组件被跟踪,则在运行完所有退役步骤后,将作为管道的最后一步引发事件。

Windsor 3,当它发布时,有一个OnDestroy方法,它接受一个lambda并添加一个退役步骤,从而强制跟踪组件,这意味着您放入那里的代码将在发布时被调用。