【发布时间】:2016-07-07 21:02:36
【问题描述】:
我正在尝试创建一个自定义 ViewResolver 类(扩展 angular 的内置类),以使用自定义服务增强我系统的样式元数据(我正在从外部系统加载我的样式)。但是我遇到了依赖注入系统和ViewResolver 的问题。
我的系统设置如下:
Boot.ts:
bootstrap(App, [
MyStyleService, // my custom service
SomeOtherService, // another custom service used by MyStyleService
{
provide: ViewResolver,
useClass: MyViewResolver // my custom ViewResolver
}
])
MyViewResolver.ts:
@Injectable()
export class MyViewResolover extends ViewResolver {
constructor(
private _reflector: ReflectorReader,
// I want to reference 'StyleService' from the providers array in boot.ts
private _styleService: StyleService
) {
super(_reflector);
}
public resolve(comopnent: Type) {
let meta: ViewMetadata = super.resolve(component);
let styles = this._styleService.someMethod(meta);
}
}
但是在MyViewResolver 内部,this._styleService 尚未注入,当前为undefined。需要注意的是,MyStyleService 还依赖于另一个注入服务 SomeOtherService,因此我需要确保该提供程序也已定义并可用于注入器。
我希望所有这些服务都由引导程序“提供”,以便将来我可以在每个系统的基础上提供我的任何服务的替代版本。
作为参考,这是 Angular 的核心 ViewResolver:
view_resolver.ts(Angular2 核心):
import {Injectable, ViewMetadata, ComponentMetadata,} from '@angular/core';
import {ReflectorReader, reflector} from '../core_private';
import {Type, stringify, isBlank, isPresent} from '../src/facade/lang';
import {BaseException} from '../src/facade/exceptions';
import {Map} from '../src/facade/collection';
@Injectable()
export class ViewResolver {
constructor(private _reflector: ReflectorReader = reflector) {}
resolve(component: Type): ViewMetadata {
... stuff here ...
}
}
【问题讨论】:
标签: dependency-injection angular angular2-services