3
我有一个工厂和部件在温莎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我在温莎3试过了,它按预期工作。然而它在Windsor 2.5.3中也失败了。我把测试放在这里(有2个分支:https://github.com/amarraja/WindsorFactories)。我为了升级项目太晚了,您是否发现上述解决方法有问题?谢谢您的帮助! – amarsuperstar
欢呼声。下班后我会看看。 –