2013-02-27 1 views
1

Disons que j'ai un noyau Ninject, nommé _kernel, un objet donné (reçu en paramètre), disons myClass, de type IMyClass: IDisposable; J'ai remarqué que quand je lie IMyClass à myClass via ToMethod, comme ceci:Objet en cours de résolution via ToConstant mais pas lors de la résolution via ToMethod

Bind<IMyClass>().ToMethod(x => myClass); 

Ensuite, chaque fois que je cède les _kernel, myClass.Dispose() ne sera pas invoquée.

Cependant, si au lieu que je lie IMyClass à myClass via ToConstant, comme ceci:

Bind<IMyClass>().ToConstant(myClass); 

alors myClass.Dispose() sera appelée lors de l'élimination _kernel.

Pourriez-vous me expliquer ce comportement?

Répondre

3

La version standard de ToConstant est portée Singleton et ToMethod est transitoire portée. La durée de vie d'un objet de portée transitoire n'est pas gérée par Ninject, donc l'instance n'est pas Dispose d.

+1

@ julio.g Voir aussi https://github.com/ninject/ninject/wiki/Object-Scopes (ajout d'une colonne Disposal avec quelques informations connexes). –

+0

Merci Remo! @RubenBartelink: Beaucoup plus clair pour moi maintenant, merci! –

Questions connexes