2010-06-18 8 views
0

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); 
     } 

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é?

+0

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. –

+0

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

+0

Ê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. –

Répondre

0

Eh bien, ce qui semble être le problème est pas que l'unité contient l'objet, mais un objet créé dans l'application, qui utilise les objet, est de garder le GC de le recueillir

Donc, ce n'est pas vraiment une réponse, mais je n'ai pas vu de bouton de suppression pour ma question ....