在另一项服务中使用角度服务的自定义服务 - angular2

时间:2017-08-20 08:35:56

标签: angular dependency-injection angular-services

我有两个服务,其中一个(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同时使用httplogger,我有一个使用app.component的组件settingService,这是我的app.componentapp.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,这不起作用!

3 个答案:

答案 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}} 重要。它应该是从最不依赖到最依赖 根据我的经验,请注意以下事情:

  1. 避免循环依赖
  2. 注意app.module提供程序中的服务注册顺序
  3. 请注意app.module中相互依赖的服务的导入顺序,必须从低依赖性到高依赖性进行排序,否则您将错误地将服务注入另一个服务。所以,如果您使用app.module.ts并导出所有服务,然后在index.ts中导入index.ts,则必须注意app.module.ts <中类的导出顺序/ LI>