1
我試圖創建一個自定義ViewResolver
類(擴展角度的內置類)以增強我的系統樣式元數據與自定義服務(我從外部系統加載我的樣式)。但是,我遇到了依賴注入系統和ViewResolver
的問題。自定義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
,所以我需要確保該提供者也被定義並可用於注入器。
我希望所有這些服務都由bootstrap「提供」,以便將來我可以在每個系統的基礎上提供我的任何服務的備用版本。
供參考,這是角的核心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 ...
}
}
謝謝,這工作的魅力。它沒有使用與我的主引導應用程序相同的「提供程序」堆棧,但我仍然可以覆蓋該級別的依賴關係,因此適用於我的使用!再次感謝。 – TimS