Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: amarsuperstarОтветов: 1

У меня есть фабрика и компонент, зарегистрированные в 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!")
   }
}

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

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

castle-windsorinversion-of-control

Ответы

Ответ 1 · рейтинг 2 · amarsuperstar

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы