我有一个如下的班级
import { Injectable, Inject } from '@angular/core';
@Injectable()
export class moviindustry {
constructor(private music:musicindustry) { }
producer() {
this.music.album();
alert('moviindustry producer');
}
directort() {
alert('moviindustry directort');
}
crew() {
alert('moviindustry crew');
}
}
export class musicindustry {
album() {
alert('album')
}
}
我已经像这样在NgModule中注册了该类
@NgModule({
declarations: [
AppComponent,
ComponentAComponent
],
imports: [
BrowserModule,
HttpModule
],
providers: [
moviindustry,
musicindustry
],
bootstrap: [AppComponent]
})
export class AppModule { }
现在当我尝试访问此类的课程
export class AppComponent {
constructor(private movies:moviindustry){
this.movies.producer();
}
}
我遇到以下错误
未捕获的错误:无法解析moviindustry的所有参数:(?)。 在语法错误(compiler.es5.js:1694)
根据文档,Injectable()用于为该类注入依赖项注入,那么为什么我不能使用它?具有讽刺意味的是,当我在构造函数中使用http时,我的应用会被编译,有人可以帮助我理解这一点吗?
注意:
我也不能这样使用
constructor(@Inject(musicindustry) private music:musicindustry) { }
答案 0 :(得分:3)
您的代码存在严重问题。根据{{3}}完全不是。
它违反了许多规则,例如单一责任主体; 服务类的名称应在UpperCamelCase等中。
在这里,您可以适当地重构代码以使其正常工作:
为这两个服务创建两个不同的文件:
电影服务:
import { Injectable } from '@angular/core';
import { MusicService } from './music.service';
@Injectable()
export class MovieService {
constructor(private music: MusicService) { }
producer() {
this.music.album();
alert('moviindustry producer');
}
directort() {
alert('moviindustry directort');
}
crew() {
alert('moviindustry crew');
}
}
音乐服务:
import { Injectable } from '@angular/core';
@Injectable()
export class MusicService {
album() {
alert('album')
}
}
这是您推荐的Angular Style Guide。
答案 1 :(得分:1)
将musicindustry
类移到moviindustry
类之上,以便更好地解决moviindustry
类的依赖关系。同样,即使没有DI的情况下,也最好为提供者添加@Injectable()
装饰器。
import { Injectable, Inject } from '@angular/core';
@Injectable()
export class musicindustry {
album() {
alert('album')
}
}
@Injectable()
export class moviindustry {
constructor(private music:musicindustry) { }
producer() {
this.music.album();
alert('moviindustry producer');
}
directort() {
alert('moviindustry directort');
}
crew() {
alert('moviindustry crew');
}
}