2016-11-25 2 views
1

Я использую http-сервис, импортированный из @ angular/http внутри общего модуля, я расширяю службу http, используя наследование класса. Таким образом, мой общий модуль имеет службу под названием «AuthHttp», которая расширяет HTTP-сервис. В моем основном модуле приложения я определяю людей провайдеров, предоставляю: http useClass: AuthHttp. И внутри моего приложения на разных компонентах я вставляю http-сервис, возможно ли или по дизайну, что служба не является одиночной?Угловая 2-х сервисная услуга - однотонный или нет?

+1

Это зависит только от вашего кода, но этого нет в вашем вопросе, -) –

+0

Экземпляр службы создается на каждом уровне вашего приложения, которое вы ему предоставляете. Дополнительная информация здесь: http://stackoverflow.com/questions/34929665/angularjs-2-multiple-instance-of-service-created и http://stackoverflow.com/questions/34804298/whats-the-best -tree-to-inject-one-service-in-another-in-angular-2-beta/34807397 # 34807397 – Thibs

ответ

4

Если вы предоставляете услугу в @NgModule({providers: [...]}) из AppModule или прямо или косвенно импортированным модулем AppModule, то вы получаете синглтон.

Если вы предоставляете услугу в @Component(...), вы получаете экземпляр службы на экземпляр компонента.

+0

Это то, что я, хотя. Однако у меня была странная ситуация: я импортирую свой «AuthenticationModule» в свой «AppModule». И в этом 'AuthenticationModule' я предоставляю свой« AuthenticationService »(мне нужно это как одноэлементный, так как я работаю с переменными-членами там). Тем не менее, я получил «максимальный стек вызовов превышен», что является признаком того, что служба не является синглом. Но: Когда я предоставляю услугу в своем «AppModule» вместо «AuthenticationModule», все работает так, как ожидалось. Не могли бы вы прояснить ситуацию здесь? – dave0688

+0

Трудно сказать по этой информации. Если провайдеры предоставляются только в '@NgModule()' из ** не-ленивых загружаемых модулей, то никогда не будет больше одного экземпляра, созданного DI. –

+0

Хм, похоже, это так. Есть ли что-нибудь еще, что приходит в голову, в результате чего в этой ситуации превышается «максимальный столбец»? – dave0688