В настоящее время я использую @Directive
с набором провайдеров для создания изолированного инъекционного набора служб / значений для любого компонента без него.
@Directive({
selector: '[my-isolated-directive]',
providers: [MyHierarchicalService]
})
export class MyIsolatedDirective {}
<ng-container my-isolated-directive>
<component-that-interacts-with-isolation></..>
<component-that-requires-isolation></...>
</ng-container>
Это прекрасно работает, но требует, чтобы я ввел новый набор кода в представление, где он, вероятно, не имеет ничего общего, кроме открытия нового иерархического инжектора с помощью сервиса.
Мой вопрос: возможно ли сделать это программно без помощи директивы?Я знаю, что можно вручную создать инжектор с помощью Injector.create([MyHierarchicalService], parent)
, но можно ли разрешить использование этого инжектора для дочерних компонентов?
Невозможно просто переместить providers: [MyHierarchicalService]
в компонент <component-that-requires-isolation>
, посколькунесколько компонентов в этой изоляции потребуют одинакового обслуживания.Это можно рассматривать как «открытие пробела» в иерархическом инжекторе, где под ним все компоненты совместно используют один и тот же сервис.
Пример упрощенного стекаблица с моим текущим решением: https://stackblitz.com/edit/angular-zqxn4f
Фактическая директивас моим изолированным пространством, когда интересно: https://github.com/opf/openproject/pull/7042/files#diff-22f5fc2b9b761e556ed425d5e8b93fb4R70
Фактический код с использованием директивного решения: https://github.com/opf/openproject/pull/7042/files#diff-09e0b8f2cf13d8ecc8ccc45872068580R7