我有两个服务,其中一个(Logger)将被另一个(SettingService)使用,我已经搜索了很多并看到了这个问题的其他问题和答案,但没有运气,我已经读过这个文件angualr.io/When the service needs a service
这是两个服务的代码
记录器作为服务
@Injectable()
export class Logger {
public logs: string[] = [];
//do stuffs
}
SettingService
@Injectable()
export class SettingService
{
private url = '/setting';
private headers = new Headers({ 'content-type': 'application/json' });
constructor(private http: Http,private logger: Logger) { } //problem is here
//do stuffs
}
settingService
同时使用http
和logger
,我有一个使用app.component
的组件settingService
,这是我的app.component
和app.module
app.component.ts
@Component({
moduleId: module.id,
selector: 'my-app',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css']
})
export class AppComponent implements OnInit {
constructor(private settingService: SettingService) { }
}
app.module.ts
@NgModule({
imports: [ BrowserModule, FormsModule, HttpModule ],
declarations: [AppComponent],
providers: [Logger, SettingService],
bootstrap: [ AppComponent ]
})
export class AppModule { }
但不幸的是我得到的错误是:
(SystemJS) Can't resolve all parameters for SettingService: ([object Object], ?).Error: Can't resolve all parameters for SettingService: ([object Object], ?)
怎么了??
这是plunker,这不起作用!
答案 0 :(得分:1)
尝试将导入服务的顺序更改为AppModule或尝试在settingService中使用forwardRef(),例如构造函数(private http:Http,@ Inject(forwardRef(()=> Logger))private logger:Logger)
答案 1 :(得分:0)
您可以尝试的一件事是在像这个
这样的引导程序提供程序中提供记录器bootstrap(AppComponent, [
provide(Logger, {useClass: Logger},
....)
]);
答案 2 :(得分:0)
错误 ERORR:无法解析自定义服务的所有参数:([对象对象],?)
我正在使用services文件夹下的index.ts
文件导出我的服务,然后我导入了app.module.ts
中的索引文件,index.ts
导出的顺序导入{ {1}} 重要。它应该是从最不依赖到最依赖
根据我的经验,请注意以下事情:
app.module
中相互依赖的服务的导入顺序,必须从低依赖性到高依赖性进行排序,否则您将错误地将服务注入另一个服务。所以,如果您使用app.module.ts
并导出所有服务,然后在index.ts
中导入index.ts
,则必须注意app.module.ts
<中类的导出顺序/ LI>
醇>