У меня есть фабрика и компонент, зарегистрированные в 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!")
}
}
Затем мои компоненты выпускаются, как и ожидалось. Любые советы о том, является ли это ошибкой или я что-то неправильно понимаю. Мое решение работает в конце дня, но не так хорошо, как я надеялся.