没有BaseService类的提供者

时间:2018-06-08 08:16:03

标签: angular dependency-injection injectable

我在Angular 6上有项目。我的一些服务扩展了基类。基类是不带@Injectable装饰器的常规TypeScript类。当我尝试运行应用程序时,我收到错误:

  

NullInjectorError:没有HttpCommonService的提供者!

狂野猜测 - 也许它与某种方式的DI有关(因为我在没有@Component装饰器的情况下从另一个基类中扩展了一些组件并且它完美地工作),但是,即使在DI情况下,我也是如此。除了扩展服务类之外,我没有创建新的基类实例。

问题是什么,或者至少我应该在哪里搜索问题?

实施例

这是基类:

export class HttpCommonService {
  constructor(protected http: HttpClient) {}

  /* Methods here */
}

这是注入app根目录的服务

@Injectable({ providedIn: 'root' })

export class HttpService extends HttpCommonService {
  constructor(protected http: HttpClient) {
    super(http);
  }

  /* Methods here */
}

1 个答案:

答案 0 :(得分:0)

这似乎是Angular的错误-当前处于打开状态: ProvidedIn Annotation Not Compatible With Deriving Classes

对于具有基类也是可注入服务的服务,我遇到了同样的问题。您可以尝试链接错误中建议的解决方法:

  

要解决此问题,在任何派生类中,我们都必须将ngInjectableDef设置为undefined。反过来,这将调用ProvideIn逻辑为我们创建工厂

或者您可以按照ol的方式声明服务,并在NgModule装饰器的providers部分中设置服务类型:

    @NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpClientModule
  ],
  providers: [HttpService],
  bootstrap: [AppComponent]
})
export class AppModule { }

我知道这不是Angular 6中首选的处理方式,但仍受支持,并且可以解决您的问题。

我可以看到您已经尝试过了。但是,这肯定应该起作用,因为这是我从5升级到Angular 6之前配置服务的方式,这可能表明您错过了一些配置。您还记得从Injectable装饰器中删除了ProvideIn选项吗?