¿Es posible tener ganchos de ciclo de vida para un servicio que está anotado con @Injectable() ?
Hubiera esperado que los ganchos del ciclo de vida se llamaran en un servicio como este, pero se demostró que estaba equivocado, parece estar funcionando solo en @Component . ¿Hay alguna forma de informarse en un servicio cuando la inyección de dependencia crea/destruye un servicio?
import {Component, Injectable, OnInit, OnDestroy} from 'angular2/core'; @Injectable() export class SampleService implements OnInit, OnDestroy { ngOnInit() { console.log("OnInit") } ngOnDestroy() { console.log("OnDestroy") } } @Component({ selector: "sample", template: "<div>Sample Component</div>", providers: [ SampleService ] }) export class SampleComponent { constructor() { private _sampleService: SampleService } }Los inyectables son solo clases normales (objetos normales) y, como tales, no tienen un ciclo de vida especial.
Cuando se crea un objeto de su clase, se llama al constructor de la clase, por lo que sería su "OnInit". En cuanto a la destrucción, un servicio realmente no se destruye. Lo único que podría suceder es que se recolecte basura una vez que ya no haya una referencia a él, lo que probablemente suceda después de que se elimine el inyector de dependencia. Pero generalmente no tienes control sobre él, y no existe el concepto de un deconstructor en JavaScript.
@Injectable() export class SampleService { constructor() { console.log('Sample service is created'); } }Los enlaces de ciclo de vida ngOn* que muestra son solo para componentes. Podría inyectar otro servicio (llámelo TrackServiceLifecycles) en SampleService y hacer que el constructor() de SampleService llame a un método en el otro servicio para informarle que se creó. Pero no puedo pensar en una forma de notificar al otro servicio cuando se destruye SampleService (recolección de basura).
Véase también destructor de clases ECMAScript 6