2010-03-12 1 views
7

Quando un oggetto in Ninject è associato a InTransientScope(), l'oggetto non viene inserito nella cache, poiché è, ehm, transiente e non è collegato a nulla.Quando un oggetto transitorio è disattivato in Ninject?

Al termine dell'oggetto, posso chiamare kernel.Release(obj); passa alla Cache dove recupera l'elemento memorizzato nella cache e chiama Pipeline.Deactivate utilizzando la voce nella cache.

Ma poiché gli oggetti transitori non sono memorizzati nella cache, ciò non accade. Non sono stato in grado di capire dove (o chi) esegue la disattivazione per oggetti transitori. Oppure l'ipotesi che gli oggetti transienti siano sempre e solo attivati ​​e che se voglio un oggetto disattivabile, devo usare qualche altro ambito?

risposta

8

Le vostre ipotesi sono corrette. Gli oggetti transitori non sono tracciati in Ninject e non sono controllati nella pipeline di disattivazione. È tua responsabilità ripulire le istanze transitorie. Se si desidera che il kernel gestisca le proprie istanze, è necessario utilizzare un ambito integrato o un ambito personalizzato.

+0

Grazie. La cosa 'interessante' è che sono attivati ​​bene, quindi c'è una discrepanza nella mia testa (qualcosa che è attivato dovrebbe essere disattivato). – nwahmaet