Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

229
Vistas
¿Cómo inyectar condicionalmente el servicio en el componente?

Tengo 2 servicios one.service.ts y two.service.ts , y un componente dashboard.component.ts .

¿Cómo inyectar condicionalmente esos servicios en el componente?

 import { Component, ViewEncapsulation, Inject } from '@angular/core'; import { OneService } from '../services/one.service'; import { TwoService } from '../services/two.service'; @Component({ selector: 'dashboard', encapsulation: ViewEncapsulation.Emulated, styleUrls: ['./dashboard.less'], templateUrl: './dashboard.html' }) export class DashboardComponent { constructor() { // Here how do I get service instance based on some this condition. if(true) { /* Service **one.service.ts** to be injected */ } else { /* Service **two.service.ts** to be injected */ } } }
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puedes usar el Injector

 import { Injector } from '@angular/core' ... constructor(private injector: Injector){ if(true) { this.oneService = <OneService>this.injector.get(OneService); } else { this.twoService = <TwoService>this.injector.get(TwoService); } }

Como mencionó @MeirionHughes, esto se llama el patrón del localizador de servicios:

La técnica es un ejemplo del patrón del localizador de servicios.

Evita esta técnica a menos que realmente la necesites. Fomenta un enfoque descuidado de bolsa de sorpresas como el que se ve aquí. Es difícil de explicar, entender y probar. Al inspeccionar el constructor, no puede saber qué requiere esta clase o qué hará. Podría adquirir servicios de cualquier componente anterior, no solo del suyo propio. Estás obligado a explorar la implementación para descubrir lo que hace.

Los desarrolladores de marcos pueden adoptar este enfoque cuando deben adquirir servicios de forma genérica y dinámica.

Fuente: https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#explicit-injector

Y nuevamente, como se mencionó, puede obtener estos inyectores en otro servicio y luego inyectar este servicio en su componente.

about 4 years ago · Santiago Trujillo Denunciar

0

En otras palabras, desea lograr un patrón Bridge o Abstract Factory . En este caso, puede usar useFactory . Publicación relacionada.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda