如何使用angular2依赖系统手动注册提供程序的实例

时间:2017-02-11 20:13:49

标签: angular openfin

我正在使用Angular2和OpenFin来构建一个应用程序。我有一个服务类,它被标记为Injectable,并在NgModule中列为提供者。它被注入到组件中,但只有在创建组件时才会实例化我的服务类。我希望在应用程序启动时创建服务类,无论我的组件是否已创建,但是当我的组件创建时,我预先创建的实例应该注入到组件中。

我怀疑我想要做的是在启动时创建服务实例,然后将其传递给Angular,告诉它在任何组件需要时使用该实例。这是可能的还是我必须依靠Angular来实例化我的服务。

由于 安迪

4 个答案:

答案 0 :(得分:2)

在AppModule的提供商元数据中注册您的服务将使该服务可用于该应用程序中的任何组件。

import { YourService } from './your-service.service';

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    ...
  ],
  providers: [YourService], // YourService as a provider to the application
  bootstrap: [AppComponent]
})
export class AppModule {
  constructor(private yourService: YourService){
    this.yourService.Init();
  }
}

这与在应用程序启动时注册容器的单例相同。 Angular将负责其余部分。

希望这会帮助你!

答案 1 :(得分:0)

要执行此操作,只需在@ngModule的{​​{1}}装饰器中注册您的服务,如下所示,

rootcomponent

现在,只要需要,就可以在任何组件中使用此服务。

注意:请勿尝试在任何单个组件中使用/注册@NgModule({ ... ... providers:[AppService], //scoped to entire application ... }) 。如果您尝试这样做,它将创建一个仅作用于该组件的不同实例。

答案 2 :(得分:0)

Angular DI很懒,但有一个技巧让服务实例化急切:你需要实现OnDestroy接口。

答案 3 :(得分:0)

您可以将其提供为react-router-redux

APP_INITIALIZER

https://angular.io/docs/ts/latest/api/core/index/APP_INITIALIZER-let.html