Angular2 services angular2依赖注入-多层-组件需要知道太多

Angular2 services angular2依赖注入-多层-组件需要知道太多,angular2-services,Angular2 Services,我已经阅读了大部分/所有的angular2 DI问题,并且离我的目标越来越近了,但还不是很近 我希望有一个SvgA实例(跨组件共享),但每个服务都有自己的子服务实例(SubSvc) 我想我了解很多DI:如果我在顶层声明SvcA,那么所有组件都将共享一个实例,但是如果我在ComponentOne的“提供者”中声明它,它将获得自己的SvcA实例 我找到了两种解决方案,但它们都有缺点——我想知道我是否错过了另一种解决方案 解决方案1 索引 组件一.ts svc_a.ts 子系统svc.ts 解决方案2

我已经阅读了大部分/所有的angular2 DI问题,并且离我的目标越来越近了,但还不是很近

我希望有一个SvgA实例(跨组件共享),但每个服务都有自己的子服务实例(SubSvc)

我想我了解很多DI:如果我在顶层声明SvcA,那么所有组件都将共享一个实例,但是如果我在ComponentOne的“提供者”中声明它,它将获得自己的SvcA实例

我找到了两种解决方案,但它们都有缺点——我想知道我是否错过了另一种解决方案

解决方案1 索引 组件一.ts svc_a.ts 子系统svc.ts 解决方案2 组件一.ts svc_a.ts 第一个解决方案没有对subsvc使用DI,这我不喜欢

第二种解决方案使用DI,但要求ComponentOne了解SubSvc,即使它不直接使用它。

这是Angular 2的设计缺陷(泄漏的抽象)。您可以将子服务注入到服务中,而无需为外部的子服务定义提供者。即使将Http注入SvcA,也必须在外部componentOne中指定其提供程序。在这方面,将SubSvc注入SvcA与将Http注入SvcA没有什么不同

我不知道有什么好办法

我在Angular的GitHub上打开了这个问题:

这是Angular 2的一个设计缺陷(泄漏的抽象)。您可以将子服务注入到服务中,而无需为外部的子服务定义提供者。即使将Http注入SvcA,也必须在外部componentOne中指定其提供程序。在这方面,将SubSvc注入SvcA与将Http注入SvcA没有什么不同

我不知道有什么好办法


我在Angular的GitHub上打开了这一期:

的确如此。我还感到遗憾的是,你的问题在引起认真讨论后被任意关闭。坦率地说,整个框架将实现细节泄露到了一个疯狂的程度。缺少这一特性不仅使维护变得困难,而且使维护变得随意和混乱。有些东西坏了,你必须通过发现它是如何实现的来逐步修复它,因为你知道没有直觉或模式可以避免这种坏的发生。我还感到遗憾的是,你的问题在引起认真讨论后被任意关闭。坦率地说,整个框架将实现细节泄露到了一个疯狂的程度。缺少这一特性不仅使维护变得困难,而且使维护变得随意和混乱。有些东西坏了,你必须通过发现它是如何实现的来逐步修复它,因为你知道没有直觉或模式可以避免这种坏。
import {SvcA} from 'svc_a';
import {SvcB} from 'svc_b';
export const APP_PROVIDERS = [ SvcA, SvcB ];
(no providers set)
constructor( http: Http, svca: svcA ) {}
@Injectable()
export class SvcA {
constructor(http:Http) {
    subsvc = new SubSvc(http); // this works - but doesn't use DI for SubSvc
    subsvc.configure( stuff )
@Injectable()
export class SubSvc {
    private http: Http;
    constructor( http: Http ) {}
providers: [SvcA, SubSvc]
constructor( http: Http, svca: SvcA ) {}
@Injectable()
export class SvcA {
constructor(http: Http, @Inject(SubSvc) subSvc: SubSvc) {
subsvc.configure( stuff )