En ce qui concerne ma question précédente J'ai besoin de vérifier si un composant qui sera instancié par Castle Windsor peut être récupéré après que mon code ait fini de l'utiliser. J'ai essayé la suggestion dans les réponses de la question précédente, mais cela ne semble pas fonctionner comme prévu, du moins pour mon code. Je voudrais donc écrire un test unitaire qui vérifie si une instance d'objet spécifique peut être récupérée après l'exécution d'une partie de mon code.
Est-ce possible de le faire de manière fiable ?
EDIT
J'ai actuellement le test suivant basé sur la réponse de Paul Stovell, qui réussit :
[TestMethod]
public void ReleaseTest()
{
WindsorContainer container = new WindsorContainer();
container.Kernel.ReleasePolicy = new NoTrackingReleasePolicy();
container.AddComponentWithLifestyle<ReleaseTester>(LifestyleType.Transient);
Assert.AreEqual(0, ReleaseTester.refCount);
var weakRef = new WeakReference(container.Resolve<ReleaseTester>());
Assert.AreEqual(1, ReleaseTester.refCount);
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.AreEqual(0, ReleaseTester.refCount, "Component not released");
}
private class ReleaseTester
{
public static int refCount = 0;
public ReleaseTester()
{
refCount++;
}
~ReleaseTester()
{
refCount--;
}
}
Ai-je raison de supposer que, sur la base du test ci-dessus, je peux conclure que Windsor ne fera pas fuir la mémoire en utilisant la NoTrackingReleasePolicy ?