You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular报错:No provider for Http!MyService依赖注入问题求助

解决Angular中手动创建注入器时的"No provider for Http"错误

嘿,这个问题我太熟悉了!你遇到的错误根源在于:你手动创建的ReflectiveInjector是一个完全独立的根注入器,它不会自动继承AppModule里配置的任何提供者——哪怕你在AppModule里导入了HttpModule,也和这个手动创建的注入器没关系。

问题分析

MyService依赖Http,而Http本身又依赖XHRBackend和RequestOptions这些底层服务。当你用ReflectiveInjector.resolveAndCreate()创建注入器时,它只会使用你传入的数组里的提供者,默认不会包含Http及其依赖,所以才会抛出找不到Http提供者的错误。

解决方案

你需要把Http相关的提供者显式添加到注入器的配置数组里,有两种简单的方式:

方式1:直接导入HttpModule

HttpModule已经封装了Http及其所有依赖的提供者,直接把它加入注入器配置即可:

import { ReflectiveInjector } from '@angular/core';
import { HttpModule } from '@angular/http';
import { MyService } from './path-to-my-service';

const injector = ReflectiveInjector.resolveAndCreate([
  HttpModule, // 加入HttpModule,它会提供Http、XHRBackend等依赖
  MyService,
  { provide: 'name', useValue: 'abc' }
]);

方式2:显式添加Http及其依赖

如果你不想导入整个HttpModule,可以单独添加Http和它的依赖服务:

import { ReflectiveInjector } from '@angular/core';
import { Http, XHRBackend, RequestOptions } from '@angular/http';
import { MyService } from './path-to-my-service';

const injector = ReflectiveInjector.resolveAndCreate([
  Http,
  XHRBackend,
  RequestOptions,
  MyService,
  { provide: 'name', useValue: 'abc' }
]);

额外建议:尽量遵循Angular的DI最佳实践

除非你有特殊场景需要手动创建注入器,否则更推荐通过AppModule的providers配置来提供MyService,这样Angular的默认注入器会自动处理所有依赖:

@NgModule({
  imports: [HttpModule],
  providers: [
    MyService,
    { provide: 'name', useValue: 'abc' }
  ]
})
export class AppModule { }

之后你就可以在组件或其他服务里直接注入MyService,不需要手动创建注入器,更简洁也更符合Angular的设计理念。

内容的提问来源于stack exchange,提问作者user1765862

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:36:05