В Angular 6 представлены провайдеры с возможностью расшатывания деревьев с синтаксисом
@Inject({provideIn:'...'}
.
Чтобы воспользоваться преимуществом аспекта расшатывания дерева, имеет ли значение, внедряю ли я службунепосредственно через конструктор или через инжектор?
Пример:
Обслуживание:
@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 обнаруживать инъекцию инжектора, а затем пропускает дрожание дерева для поставщиков?Или он достаточно умен, чтобы обнаружить, что MyService извлекается из инжектора?