je veux ajouter un objet existant à mon conteneur d'unité enregistrée à une interface spécifique,Ajouter instance existante (objet) à l'unité
donc quand je résous l'interface i obtenir cet objet existant (il est utilisé pour les tests, et l'objet contient beaucoup de données XML, et pour chaque test, je veux utiliser un autre objet).
Je fais comme ça:
public static void RegisterInstance<T>(T instance)
{
container.RegisterInstance<T>(instance);
}
où container
est mon UnityContainer. Ce code est dans une classe statique appelée IoCContainer
Mon appel est alors:
IoCContainer.RegisterInstance<IConfigurationRepository>(new MockConfigurationRepository(XML));
cela semble fonctionner, mais quand j'ajouter plus tard une nouvelle instance, l'ancien semble conservée en mémoire par l'unité . Donc quand plus tard je veux enregistrer l'objet B au lieu de l'objet B (pendant le test) et plus tard sur le registre C, l'unité résout correctement C mais elle garde B et A en mémoire (et ils sont assez grands, remarqué.
y at-il un moyen de supprimer a et B de la mémoire de l'unité?
Etes-vous sûr que l'unité est celle qui détient la référence? Cela pourrait être une autre partie de votre code, ou peut-être que les objets n'ont pas encore été collectés. –
bien sûr, parce que quand je place mon conteneur de variables interne à NULL et instancie un nouveau, l'utilisation de la mémoire diminue – Michel
Êtes-vous sûr que les objets n'ont pas été libérés par Unity mais le garbage collector ne les a pas encore nettoyés? Vous avez utilisé le mot "semble" pour être conservé en mémoire. Un profileur de mémoire révélera la réponse à coup sûr. –