2016-11-25 2 views
1

Ich verwende HTTP-Service von @ angular/http in einem geteilten Modul importiert, ich erweitere den http-Service mit Klassenvererbung. Also hat mein geteiltes Modul einen Dienst namens "AuthHttp", der den http-Dienst erweitert. In meinem Haupt-App-Modul definiere ich Personen-Provider, zur Verfügung stellen: http useClass: AuthHttp. Und in meiner App bei verschiedenen Komponenten injiziere ich den http-Service, ist es möglich oder von Design, dass der Dienst nicht Singleton ist?Angular 2 http-Dienst ist Singleton oder nicht?

+1

Das hängt nur von Ihrem Code ab, aber das fehlt in Ihrer Frage, -) –

+0

Eine Instanz des Dienstes wird auf jeder "Ebene" Ihrer App erstellt, die Sie ihm zur Verfügung stellen. Weitere Informationen hier: http://stackoverflow.com/questions/34929665/angularjs-2-multiple-instance-of-service-created und http://stackoverflow.com/questions/34804298/whats-the-best -way-to-inject-one-service-in-anderen-in-eckigen-2-beta/34807397 # 34807397 – Thibs

Antwort

4

Wenn Sie den Service in @NgModule({providers: [...]}) der AppModule oder ein Modul direkt oder indirekt von AppModule importiert, dann erhalten Sie ein Singleton.

Wenn Sie den Service in einer @Component(...) bereitstellen, erhalten Sie eine Serviceinstanz pro Komponenteninstanz.

+0

Das ist, was ich tue. Ich hatte jedoch eine seltsame Situation: Ich importiere mein 'AuthenticationModule' in meinem' AppModule'. Und in diesem 'AuthenticationModule' stelle ich meinen' AuthenticationService' bereit (ich brauche das als Singleton, da ich dort mit Member-Variablen arbeite). Allerdings habe ich einen "maximalen Aufruf-Stack überschritten", was ein Zeichen dafür ist, dass ein Service kein Singleton ist. Aber: Wenn ich den Dienst in meinem 'AppModule' anstelle des' AuthenticationModule' zur Verfügung stelle, funktioniert alles wie erwartet. Können Sie bitte hier die Dinge klären? – dave0688

+0

Von diesen Informationen kaum zu unterscheiden. Wenn die Provider nur in '@NgModule()' von ** nicht-lazy-loaded ** Modulen zur Verfügung gestellt werden, gibt es nie mehr als eine einzige Instanz, die von DI erstellt wurde. –

+0

Hm, scheint das der Fall zu sein. Gibt es noch etwas, das Ihnen in den Sinn kommt, was zu einem "maximalen Callstack überschritten" führt? – dave0688