调用container.Release时不会触发事件,以下测试总是失败:
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事件?
答案 0 :(得分:4)
Mauricio是对的 - 该组件未触发该事件,因为该组件未被跟踪,Windsor也无法与其进行任何关联。
在跟踪组件的情况下,在运行所有停用步骤之后,将事件作为管道的最后一步引发。
Windsor 3,当它出来时,有一个OnDestroy
方法,它接受一个lambda并添加一个decommission步骤,从而强制跟踪组件,这意味着你放在那里的代码将被释放时调用。