Angular 基于角度的多级依赖注入
我试图理解引擎盖下的角度框架依赖注入解析 我有一个名为汽车的服务,它有一个名为的功能,根据发动机(马力)和轮胎(品牌)等级获取汽车细节 然后在用户演示中手动解析汽车等级部件,并提供发动机和轮胎等级的参数 1)汽车等级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
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
类。