1

Angular 6 引入了可摇树的提供程序

@Inject({provideIn:'...'} 

句法。

为了利用 tree-shaking 方面的优势,我是直接通过构造函数还是通过 Injector 注入服务有区别吗?

例子:

服务:

@Inject({provideIn:'...'} 
class MyService {}

消费者1:

@Component()
class MyComponent {
  constructor(s: MyService) {}
}

消费者2:

@Component()
class MyComponent {
  constructor(@Inject(Injector) aInjector: Injector) {
     const s: MyService = aInjector.get(MyService);
  }
}

在这两种情况下,MyService 都会被注入。我希望只有在第一种情况下,AOT 编译器才能确定该服务是通过静态分析使用的。

如果我使用第二个版本会有什么影响?AOT 会检测到 Injector 的注入,然后基本上跳过提供程序的摇树吗?或者它是否足够聪明地检测到 MyService 是从注入器中获取的?

4

0 回答 0