2017-04-22 85 views
1

我有这样的服务:错误:无效的供应商为NgModule“的AppModule” - 唯一供应商和类型的实例被允许

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers, RequestOptions } from '@angular/http'; 
import { Observable } from 'rxjs/Rx'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 
import { BaseUrl } from "../config/base-url.config"; 

enum HttpMethod { 
    get, 
    post, 
    patch, 
    put 
} 


@Injectable() 
export class AdminHttpService<T> { 
    baseUrl: string; 

    constructor(private _http: Http, private _baseUrl: BaseUrl) { 
     this.baseUrl = _baseUrl.getHttpBaseUrl(); 
    } 

    getCollection(relativeUrl: string): Observable<T[]>; 
    getCollection(relativeUrl: string, options: RequestOptions): Observable<T[]>; 

    getCollection(relativeUrl: string, options?: RequestOptions): Observable<T[]> { 
     return this.xhr(relativeUrl, HttpMethod.get, options); 
    } 

    get(relativeUrl: string): Observable<T>; 
    get(relativeUrl: string, options: RequestOptions): Observable<T>; 

    get(relativeUrl: string, options?: RequestOptions): Observable<T> { 
     return this.xhr(relativeUrl, HttpMethod.get, options); 
    } 

    getJson(path): Observable<T> { 
     return this._http.get(path) 
      .map((resp: Response) => resp.json()) 
      .catch((error: any) => Observable.throw(error.json().error || 'Something went wrong!')); 
    } 

    create(relativeUrl: string, data: any, options?: RequestOptions): Observable<T> { 
     return this.xhr(relativeUrl, HttpMethod.post, data, options); 
    } 

    private xhr(relativeUrl: string, httpMethod: HttpMethod, requestBody?: any, options?: RequestOptions): any { 
     var requestUrl: string = this.baseUrl + relativeUrl; 

     if (!options) { 
      options = new RequestOptions({ 
       withCredentials: true 
      }); 
     } 

     switch (httpMethod) { 

      case HttpMethod.get: 
       return this._http.get(requestUrl, options) 
        .map((resp: Response) => resp.json()) 
        .catch((error: any) => Observable.throw(error.json().error || 'Something went wrong!')); 

      case HttpMethod.post: 
       return this._http.post(requestUrl, requestBody, options) 
        .map((resp: Response) => resp.json()) 
        .catch((error: any) => Observable.throw(error.json().error || 'Something went wrong!')); 
     } 

    } 
} 

加入此服务的AppModule的供应商名单后,我收到以下错误:

Error: Invalid provider for the NgModule 'AppModule' - only instances of Provider and Type are allowed, got: [EventsService, MenuService, BaseUrl, ?undefined?] at SyntaxError.ZoneAwareError

的AppModule是这样的:

, 
    providers: [ 
    EventsService, 
    MenuService, 
    BaseUrl, 
    AdminHttpService 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

回答

2

拉我的头发分开后,我终于找到ŧ他的理由上述错误:

我有一个包含一个桶文件:

export * from '../../services/js-events/event.service'; 
export * from '../../services/menu/menu.service'; 
export * from '../../http/admin-http.service'; 
export * from '../../config/base-url.config'; 

不知怎的,下面有复制和应用开始抛出提到的错误:(这是真的很难弄清楚这一个!

export * from '../../http/admin-http.service';

因此,如果您的桶文件具有重复导出,则可能会出现此错误。我不知道为什么会在这个时候出现这种情况。如果有人知道,请告诉我。这背后肯定有一个原因。