Vorsicht bei der Verwendung von Token
Bei dem Versuch, meine Anwendung so modular wie möglich zu gestalten, verwende ich häufig Provider-Token, um einen Dienst für eine Komponente bereitzustellen. Es scheint, dass diese ihre ngOnDestroy
Methoden NICHT erhalten :-(
z.B.
export const PAYMENTPANEL_SERVICE = new InjectionToken<PaymentPanelService>('PAYMENTPANEL_SERVICE');
Mit einem Provider-Bereich in einer Komponente:
{
provide: PAYMENTPANEL_SERVICE,
useExisting: ShopPaymentPanelService
}
Mein ShopPaymentPanelService
hat NICHT seinengOnDestroy
Methode von aufgerufen, wenn die Komponente entsorgt wird. Ich habe das gerade auf die harte Tour herausgefunden!
Eine Problemumgehung besteht darin, den Service in Verbindung mit bereitzustellen useExisting
.
[
ShopPaymentPanelService,
{
provide: PAYMENTPANEL_SERVICE,
useExisting: ShopPaymentPanelService
}
]
Als ich das tat, ngOnDispose
wurde der wie erwartet aufgerufen.
Ich bin mir nicht sicher, ob dies ein Fehler ist oder nicht, aber sehr unerwartet.
class Service implements OnDestroy
? Und was denkst du, wenn dies aufgerufen wird, wenn der Service auf Modulebene bereitgestellt wird