ng2 - 将提供程序注入常规 class

ng2 - injecting a provider into a regular class

我通常可以将任何提供程序注入到我的组件中,但这仅限于组件吗?有什么方法可以将 ActivatedRoute 注入到在此上下文中使用的常规 class 中:

app.module.ts

@NgModule({
  ...
  providers: [
    AuthenticatedRequestOptions,
    { provide: RequestOptions, useClass: AuthenticatedRequestOptions }
  ],
  ...
})

已验证请求-options.model.ts

@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
    constructor(@Inject(ActivatedRoute) public route: ActivatedRoute) {
        super();
        console.log('route', this.route);
    }
}

只需将它作为参数添加到您的构造函数中

constructor(route: ActivatedRoute, private injector: Injector) {}

AuthenticatedRequestOptions 需要在某处提供 @Component()@NgModule()、...并且 class 需要 @Injectable() 装饰器

@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {

并且 class 需要自己注入。
如果用new AuthenticatedRequestOptions(...)创建实例,不涉及Angulars DI,需要自己传参。

@Inject 允许将依赖项注入提供者,即使他们没有 @Injectable 装饰器,正确的语法是:

export class AuthenticatedRequestOptions extends BaseRequestOptions {
   constructor(@Inject(ActivatedRoute) private route: ActivatedRoute) {
   ...

为了让提供者 class 使用 DI 的类型注释,它应该有 @Injectable 装饰器:

@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
   constructor(private route: ActivatedRoute) {
   ...