Когда Windsor Container вызывает событие IKernel.ComponentDestroyed для временных компонентов? - PullRequest
1 голос
/ 27 апреля 2011

Событие не вызывается при вызове 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?

1 Ответ

4 голосов
/ 28 апреля 2011

Маурисио прав: событие для этого компонента не вызывается, потому что компонент не отслеживается и Виндзор не будет иметь с ним ничего общего.

В случае, если компонент отслеживается, событие вызывается как последний шаг конвейера, после того, как были выполнены все шаги вывода из эксплуатации.

У Windsor 3, когда он выйдет, есть метод OnDestroy, который принимает лямбду и добавляет этап вывода из эксплуатации, заставляя компонент отслеживаться, что означает, что код, который вы вставили туда, будет вызываться при выпуске. *

...