Quiero usar un proveedor simple con useFactory que también usará deps ( propósito de aprendizaje ).
Así que he creado este plnkr :
//app.module.ts ... const randomFactory = (car,engine) => { return new Calc(car,engine); }; ... providers: [Car,Engine, { provide: 'Random', useFactory: randomFactory , deps: [Car, Engine], }, ] Donde Calc es:
export class Calc { car:Car; engine:Engine; constructor ( Engine engine, Car car) { this.car=car; this.engine=engine; } doSomething(){alert(this.car.getInfo() + this.engine.getInfo()} }Ahora quiero usarlo como un objeto inyectado, así que hice esto:
export class AppComponent { constructor(@Inject('Random') r) { r.doSomething(); //should alert "car data + engine data" , but I get an error. } }Pero me sale un error: el coche no está definido
Pregunta:
No veo ningún sentido en usar deps:[] Si ya declaro esos módulos en el módulo principal de la aplicación (y por lo tanto se conoce en la aplicación global) y en la clase Calc donde importo esas clases.
Entonces, ¿cómo puedo arreglar mi código para usar deps:[] de la manera correcta?
La configuración de los proveedores es correcta. Tienes un error de sintaxis en el constructor de Calc . La declaración correcta de los argumentos es la siguiente:
constructor (engine: Engine, car: Car){Aquí está el plunker actualizado: