У меня есть @Injectable
служба, определенная в начальной загрузке. Я хочу получить экземпляр службы без использования внедрения конструктора. Я пробовал использовать, ReflectiveInjector.resolveAndCreate
но, похоже, создал новый экземпляр.
Причина, по которой я пытаюсь это сделать, заключается в том, что у меня есть базовый компонент, полученный из многих компонентов. Теперь мне нужно получить доступ к сервису, но я не хочу добавлять его в ctor, потому что я не хочу внедрять сервис во все производные компоненты.
TL; DR: мне нужен ServiceLocator.GetInstance<T>()
ОБНОВЛЕНИЕ: Обновленный код для RC5 +: Сохранение экземпляра инжектора для использования в компонентах
@SkipSelf()
. Вы также можете взаимодействовать сparent
геттером, чтобы получить корневой инжектор.В обновленном Angular, где используются ngModules, вы можете создать переменную, доступную в любом месте кода:
Теперь вы можете использовать,
AppInjector
чтобы найти любую службу в любом месте вашего кода.источник
Другой подход состоял бы в определении настраиваемого декоратора (a
CustomInjectable
для установки метаданных для внедрения зависимости:Он будет использовать метаданные из родительского конструктора вместо своих собственных. Вы можете использовать его в дочернем классе:
См. Этот вопрос для получения более подробной информации:
источник
StoreService .ts
component.ts
источник