J'essaie de donner un sens à un scénario un peu compliqué. En gros, si je classe X
qui est enregistré dans le château comme LifestyleTransient()
:composante transitoire en utilisant un composant PerWebRequest, quand est la composante PerWebRequest hors de portée?
Component.For<IX>()
.ImplementedBy<X>()
.LifestyleTransient()
X
ressemble à quelque chose comme:
public X : IX
{
private IY _y;
public X(IY y)
{
_y = y;
}
....
}
et Y
est inscrit ainsi:
Component.For<IY>()
.ImplementedBy<Y>()
.LifestylePerWebRequest()
et ressemble à:
public Y : IY, IDisposable
{
private Object obj;
public Y()
{
obj = new Object();
}
public void Dispose()
{
obj.Dispose();
}
}
Si je crée une instance de X
et Release
il:
WindsorContainer Container;
IX x = Container.Resolve<IX>();
Container.Release(x);
quand est Dispose
obtenir appelé sur Y
? Est-ce à la fin de la requête Web ou lorsque l'instance de x est libérée? Est-ce que Dispose
est appelée du tout ?!
Note: Ceci est un exemple un peu converluted, mon exemple réel est beaucoup plus complexe et invloves un MVC ControllerFactory et d'autres pièces de la technologie, mais la question se résume assez bas au-dessus de sa forme plus simple .