Angular 基于角度的多级依赖注入

Angular 基于角度的多级依赖注入,angular,dependency-injection,dependencies,constructor-injection,Angular,Dependency Injection,Dependencies,Constructor Injection,我试图理解引擎盖下的角度框架依赖注入解析 我有一个名为汽车的服务,它有一个名为的功能,根据发动机(马力)和轮胎(品牌)等级获取汽车细节 然后在用户演示中手动解析汽车等级部件,并提供发动机和轮胎等级的参数 1)汽车等级 import { Injectable, ReflectiveInjector } from '@angular/core'; import { EngineService } from '../services/engine.service'; import { TyreServ

我试图理解引擎盖下的角度框架依赖注入解析

我有一个名为汽车的服务,它有一个名为的功能,根据发动机(马力)和轮胎(品牌)等级获取汽车细节

然后在用户演示中手动解析汽车等级部件,并提供发动机和轮胎等级的参数

1)汽车等级

import { Injectable, ReflectiveInjector } from '@angular/core';
import { EngineService } from '../services/engine.service';
import { TyreService } from '../services/tyre.service';

@Injectable()
export class CarService {
constructor(public engine: EngineService, public tyre: TyreService) { }

fetchCarDetails(cylinderQuant, tyretype) {
this.engine.cylinders = cylinderQuant;
this.tyre.tyrebrand = tyretype;
return `car has ` + `${this.engine.cylinders} and ${this.tyre.tyrebrand} as a whole.`;
}
2)发动机

import { Injectable } from '@angular/core';

@Injectable()
export class EngineService {
 cylinders;
 constructor(cylindernum) {
  this.cylinders = cylindernum;
}
 }
}
import { Injectable } from '@angular/core';

@Injectable()
export class TyreService {
tyrebrand: any;
constructor(tyre) {
this.tyrebrand = tyre;
 }
}
3)轮胎

import { Injectable } from '@angular/core';

@Injectable()
export class EngineService {
 cylinders;
 constructor(cylindernum) {
  this.cylinders = cylindernum;
}
 }
}
import { Injectable } from '@angular/core';

@Injectable()
export class TyreService {
tyrebrand: any;
constructor(tyre) {
this.tyrebrand = tyre;
 }
}
4)用户演示

import { Component, ReflectiveInjector } from '@angular/core';
import { CarService } from '../services/car.service';
import { EngineService } from '../services/engine.service';
import { TyreService } from '../services/tyre.service';

@Component({
  selector: 'app-user-demo',
  templateUrl: './user-demo.component.html',
  styleUrls: ['./user-demo.component.css']
})
export class UserDemoComponent {

  carService: CarService;
  EngineService: CarService;
  TyreService: CarService;
  carDemo: string;
  constructor() {

  const injector: any = ReflectiveInjector.resolveAndCreate([CarService, EngineService, TyreService]);
    this.carDemo = injector.get(CarService);
  }

  CarDetails(): void {

    this.carDemo = this.carService.fetchCarDetails(12, 'ceat');

    console.log('Details are : ', this.carDemo);
  }   
 }
}
在运行时获取以下错误。。欢迎在此提供任何帮助/建议

错误:无法解析“EngineService”(?)的所有参数。确保所有参数都用Injector修饰或具有有效的类型批注,并且“EngineService”用Injectable修饰。 错误:无法解析“EngineService”(?)的所有参数。确保所有参数都用Inject修饰或具有有效的类型批注,并且“EngineService”用Injectable修饰。


对依赖项的更正。。。汽车服务:汽车服务;引擎服务:引擎服务;轮胎维修:轮胎维修;只能在服务中注入其他可注入项(即服务)<代码>cylindernum不是一项服务<代码>轮胎不是服务。并不是每件事都需要服务。数据类和原语通常不是服务。汽车服务世界通常通过委托TyreService创建4个轮胎,委托EngineService创建一个发动机,然后通过组装所有部件创建并返回汽车实例来创建汽车实例。而服务则意味着注入。不要使用反射式喷油器进行保养。将其注入组件构造函数。@JBNizet:是的。。我不打算在后期使用反射式喷油器。。Ngmodule或组件提供程序都可以。但我不能让它用反射式喷射器运行吗。?cylindernum和tyre是参数,只能喷射保养品<代码>cylindernum不是一项服务。在创建EngineService时,Angular怎么知道传递什么作为
cylindernum
值呢?@JBNizet:同意这一点。。因此,我移动了
cylindernum
tyre
参数,以设置各个类中的Get函数,并使用了car类的
FetchCardDetails()
,该类返回我组装的汽车连接
发动机
tyre
类。