Dependency injection 自定义ViewResolver和依赖项注入

Dependency injection 自定义ViewResolver和依赖项注入,dependency-injection,angular,angular2-services,Dependency Injection,Angular,Angular2 Services,我正试图创建一个自定义的viewsolver类(扩展angular的内置类),以使用自定义服务(我正在从外部系统加载我的样式)扩充我的系统的样式元数据。但是,依赖项注入系统和viewsolver遇到了问题 我的系统设置如下所示: Boot.ts: bootstrap(应用程序、[ MyStyleService,//我的自定义服务 SomeOtherService,//MyStyleService使用的另一个自定义服务 { 提供:ViewResolver, useClass:MyViewResol

我正试图创建一个自定义的
viewsolver
类(扩展angular的内置类),以使用自定义服务(我正在从外部系统加载我的样式)扩充我的系统的样式元数据。但是,依赖项注入系统和
viewsolver
遇到了问题

我的系统设置如下所示:

Boot.ts

bootstrap(应用程序、[
MyStyleService,//我的自定义服务
SomeOtherService,//MyStyleService使用的另一个自定义服务
{
提供:ViewResolver,
useClass:MyViewResolver//my custom ViewResolver
}
])
MyViewResolver.ts

@Injectable()
导出类MyViewResolver扩展了ViewResolver{
建造师(
专用反射器:反射器阅读器,
//我想从boot.ts中的providers数组中引用'StyleService'
private\u styleService:styleService
) {
超级反射镜;
}
公共解析(共提示:类型){
让meta:viewmata=super.resolve(组件);
让style=this.\u styleService.someMethod(meta);
}
}
但是在
myviewsolver
内部,
此。_styleService
尚未被注入,当前
未定义。需要注意的是,
MyStyleService
还依赖于另一个注入服务
SomeOtherService
,因此我需要确保该提供者也已定义,并且可用于注入程序

我希望所有这些服务都由引导程序“提供”,以便将来我可以在每个系统的基础上提供任何服务的替代版本

作为参考,这是angular的核心
ViewResolver

查看\u解析器.ts(Angular2核心):

从'@angular/core'导入{Injectable,viewmatadata,ComponentMetadata,};
从“../core_private”导入{ReflectorReader,reflector};
从“../src/facade/lang”导入{Type,stringify,isBlank,isPresent};
从“../src/facade/exceptions”导入{BaseException};
从“../src/facade/collection”导入{Map};
@可注射()
导出类ViewResolver{
构造函数(私有_reflector:ReflectorReader=reflector){}
解析(组件:类型):ViewMetadata{
…这里的东西。。。
}
}

您可以尝试使用
useFactory
配置类:

bootstrap(App, [
  MyStyleService,
  SomeOtherService,
  {
    provide: ViewResolver,
    useFactory: (_reflector: ReflectorReader, styleService: StyleService) => {
      return MyViewResolver(_reflector, _styleService);
    },
    deps: [ ReflectorReader, StyleService ]
  }
]);

谢谢,这很有魅力。它没有使用与我的主引导应用程序相同的“提供者”堆栈,但我仍然可以覆盖该级别的依赖性,因此它适合我使用!再次感谢。