另一个服务中的Angular2 Inject服务创建2个实例

阿马里马丁尼

我有两个服务:AuthService和MonBanquetService,而AuthService取决于MyService。这是这两个服务的基本代码:

AuthService.ts:

import {Inject, Injectable} from 'angular2/core';
import {MonBanquetService} from '../monbanquet.service'

@Injectable()
export class AuthService {

    public username: string;

    constructor(protected _monBanquetService: MonBanquetService) {
        // do something()
    }

}

MonBanquetService.ts

import {Injectable, Component} from 'angular2/core';
import {Http, Headers, Response} from 'angular2/http';
import {Router} from 'angular2/router';

@Injectable()
export class MonBanquetService {

    constructor(public http: Http, private _router: Router) {
        console.log('MonBanquetServices created');
    }
}

我将这两个服务作为提供程序放在boot.ts中:

bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    provide(LocationStrategy, {useClass: HashLocationStrategy}),
    HTTP_PROVIDERS,
    MonBanquetService,
    AuthService
]);

但是,当我运行该应用程序时,我看到两个控制台日志“ MonBanquetServices created”。我认为服务应该是单例的,那有两个实例呢?

谢谢。

贡特·佐赫鲍尔(GünterZöchbauer)

Angular为每个提供程序维护一个实例。如果在多个位置将类型添加为提供程序,则会导致多个实例。

当从DI请求密钥(类型,令牌)时,它将查找层次结构,并从找到的第一个提供程序中返回实例。

因此,如果要使用全局实例,只需将其添加到

bootstrap(AppComponent, [MonBanquetService])

@NgModule(
  providers: [MonBanquetService],
  ....
)
export class AppMpdule{}

或由Angular团队建议为自定义提供程序提供给根组件的提供程序列表

@Component({
  selector: 'my-app',
  providers: [MonBanquetService]
})
class AppComponent {
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法将服务注入到另一个服务(单例)Angular2中

在另一个单例服务中创建Angular单例服务的新实例

Angular2将身份验证令牌传递给另一个服务

Angular2模块:如何从另一个模块导入服务

Angular 2将服务注入到另一个服务中未定义

如何从Angular2中的另一个模块继承一个模块?

从Angular 2中的另一个模块导出服务

在Angular 2的另一个服务中注入自定义服务

使用 angular2 映射 JSON 键并更新另一个 JSON 中的值

如何在angular2中调用另一个组件函数

如何在Angular2中的另一个组件中使用变量

在Angular2中设置元素距另一个元素的高度

如何从另一个组件调用一个组件中的方法是 angular2

如何动态地在另一个组件中显示一个组件 Angular2

Angular2 RouterLinking在一个地方工作,而不是另一个地方

Angular 2 订阅订阅另一个异步函数的服务

Angular 2从组件到服务再返回到另一个组件共享数据

如何在Angular中将数组从一个服务注入到另一个服务的数组中

尝试在服务中创建一个 observable,在一个组件中使用它并在另一个组件 angular 4 中订阅它

服务内部的 angular 2 构造函数在服务内部运行另一个功能不起作用

将字符串从angular2中的另一个组件tpl传递到组件

如何在angular2中从具有多次注入的另一个Injectable扩展Injectable?

使用来自另一个Google Project的服务帐户创建Google Compute实例

如何在angular2的同一控制器内的另一个函数中调用一个函数

angular 2 - 在 div 单击时,将对象传递给另一个组件,另一个组件使用该对象调用休息服务

Angular2:将所有服务分离到一个模块中

angular2是否可以从另一个angular2项目中导入组件?

如何在同一服务中从另一个角度调用一个Angular函数?

另一个Angular2双向数据绑定(带有流星)