Виндзорская типизированная фабрика не выпускает детей

У меня есть фабрика и компонент, зарегистрированные в Windsor 2.5.1, например:

interface IFooFactory{
   IFoo CreateFoo();
}

interface IFoo {
   void DoSomething();
}

class ConcreteFoo : IFoo, IDisposable {
   public void Dispose(){
      Log.info("Going now, bye!")
   }
}

container.Register(
   Component.For<IFooFactory>().AsFactory().Lifestyle.PerWebRequest,
   Componenet.For<IFoo>().ImplementedBy<ConcreteFoo>().Lifestyle.Transient
);

Но что я замечаю, так это то, что экземпляры IFoo (может быть около 100 на запрос) не выпускаются или не вызывается их метод удаления.

Я предположил из документации здесь: http://docs.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashx, что если бы фабрика была PerRequest, то она освобождала бы созданные объекты в конце запроса.

Если я передам саму фабрику моему компоненту и вызову метод выпуска следующим образом:

interface IFooFactory{
   IFoo CreateFoo();
   void Releaser(IFoo foo);
}

interface IFoo {
   void DoSomething();
}

class ConcreteFoo : IFoo, IDisposable {

   IFooFactory fact;

   public ConcreteFoo(IFooFactory fact)....

   public void DoSomething(){
      fact.Releaser(this);
      //Do the rest
   }

   public void Dispose(){
      Log.info("Going now, bye!")
   }
}

Затем мои компоненты выпускаются, как и ожидалось. Любые советы о том, является ли это ошибкой или я что-то неправильно понимаю. Мое решение работает в конце дня, но не так хорошо, как я надеялся.


person amarsuperstar    schedule 29.09.2011    source источник
comment
Это звучит неправильно. Можете ли вы попробовать воспроизвести такое же поведение на Windsor 3?   -  person Krzysztof Kozmic    schedule 29.09.2011
comment
Привет, Кшиштоф. Я пробовал в Windsor 3, и он работает, как и ожидалось. Однако в Windsor 2.5.3 он тоже не работает. Я разместил тесты здесь (есть 2 ветки: github.com/amarraja/WindsorFactories). Я слишком поздно начал проект для обновления. Вы видите что-то не так с моим обходным решением выше? Спасибо за помощь!   -  person amarsuperstar    schedule 29.09.2011
comment
ваше здоровье. Я посмотрю на это сегодня после работы.   -  person Krzysztof Kozmic    schedule 30.09.2011
comment
это была ошибка в Windsor 2.5. Я выпустил обновление (v2.5.4), которое решает эту проблему. Спасибо, что заметили это.   -  person Krzysztof Kozmic    schedule 01.10.2011
comment
Отлично, спасибо за быстрый ответ!   -  person amarsuperstar    schedule 05.10.2011


Ответы (1)


Следуя комментариям под основным вопросом, Krzysztof выпустил обновление, чтобы исправить это в Виндзоре. Если вы видите эти проблемы, то либо обновитесь до 2.5.4, либо даже лучше, Windsor 3, если сможете.

person amarsuperstar    schedule 05.10.2011