ng2 - 将提供者注入常规类

时间:2016-11-09 13:43:52

标签: angular angular2-services

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

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);
    }
}

2 个答案:

答案 0 :(得分:1)

只需将其作为参数添加到构造函数

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

AuthenticatedRequestOptions需要在某个@Component()@NgModule(),......提供,并且该类需要@Injectable()装饰器

@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {

这个班需要自己注入 如果使用new AuthenticatedRequestOptions(...) Angulars创建实例,则不涉及DI,您需要自己传递参数。

答案 1 :(得分:1)

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

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

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

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