我试图理解一个有点复杂的场景。基本上,如果我的课程X
在 Castle 中注册为LifestyleTransient()
:
Component.For<IX>()
.ImplementedBy<X>()
.LifestyleTransient()
X
看起来像:
public X : IX
{
private IY _y;
public X(IY y)
{
_y = y;
}
....
}
并Y
因此注册:
Component.For<IY>()
.ImplementedBy<Y>()
.LifestylePerWebRequest()
看起来像:
public Y : IY, IDisposable
{
private Object obj;
public Y()
{
obj = new Object();
}
public void Dispose()
{
obj.Dispose();
}
}
如果我创建它的一个X
实例Release
:
WindsorContainer Container;
IX x = Container.Resolve<IX>();
Container.Release(x);
什么时候Dispose
被召唤Y
?是在网络请求结束时还是 x 的实例被释放时?有没有Dispose
被调用?!
注意:这是一个有点复杂的示例,我的实际示例要复杂得多,并且涉及 MVC ControllerFactory 和各种其他技术,但问题很简单地归结为上述问题。