Tengo un @Injectable
servicio definido en bootstrap. Quiero obtener la instancia del servicio sin usar la inyección del constructor. Intenté usar ReflectiveInjector.resolveAndCreate
pero eso parece crear una nueva instancia.
La razón por la que intento hacerlo es que tengo un componente base derivado de muchos componentes. Ahora necesito acceder a un servicio, pero no quiero agregarlo al ctor porque no quiero inyectar el servicio en todos los componentes derivados.
TLDR: necesito un ServiceLocator.GetInstance<T>()
ACTUALIZACIÓN: código actualizado para RC5 +: almacenamiento de la instancia del inyector para su uso en componentes
@SkipSelf()
. También puede interar elparent
captador para obtener el inyector raíz.En el Angular actualizado donde se usan ngModules, puede crear una variable disponible en cualquier parte del código:
Ahora, puede usar el
AppInjector
para encontrar cualquier servicio en cualquier parte de su código.fuente
Otro enfoque consistiría en definir un decorador personalizado (a
CustomInjectable
para configurar los metadatos para la inyección de dependencia:Aprovechará los metadatos del constructor principal en lugar de los suyos propios. Puedes usarlo en la clase infantil:
Consulte esta pregunta para obtener más detalles:
fuente
StoreService .ts
componente.ts
fuente