我正在使用角度2。
@Injectable()
export class MyService {
constructor(private http: Http, @Inject('name') @Optional() public name?: string) {
}
在appModule里面我正在尝试使用提供程序进行服务
import { Http } from '@angular/http/';
@NgModule({
bootstrap: [App],
declarations: [
App
],
imports: [ // import Angular's modules
BrowserModule,
HttpModule
],
providers: [
Http, // if I comment this out I'm getting ERROR Error: No provider for
// Http! (MyService -> Http)
MyService,
[
{ provide: 'name', useValue: '' }
],
....,
AppComponent内部我正在使用反射式注射器
const injector = ReflectiveInjector.resolveAndCreate(
[MyService,
{
provide: 'name', useValue: 'my name'
}
]);
但我得到了 案例一: 内部提供商,如果我有以下
providers: [ Http ]
然后我得到了
未处理承诺拒绝:没有ConnectionBackend的提供商! ; 区域:;任务:Promise.then;值:错误:没有提供商 ConnectionBackend!
如果离开Http,providers: [ ]
我正在
错误:没有Http的提供商! (MyService - > Http)
在实际服务上我有像
这样的构造函数@Injectable()
export class MyService {
constructor(private http: Http, @Inject('name') @Optional() public name?: string) {
}
更新 我正在注射AppComponent 构造函数(private parentInjector:Injector){ }
const injector = ReflectiveInjector.resolveAndCreate(
[MyService,
{
provide: 'name', 'abc'
}
], this.parentInjector);
this.security = injector.get(MyService);
未处理承诺拒绝:没有ConnectionBackend的提供商! ; 区域:;任务:Promise.then;值:错误:没有提供商 ConnectionBackend!
答案 0 :(得分:0)
将此模块用于最新版本的Angular:
import { HttpClient, HttpHeaders } from '@angular/common/http';
答案 1 :(得分:0)
您需要传递父注入器(来自Angular应用程序),否则创建的注入器将只知道您明确传递的提供者
constructor(private parentInjector:Injector) {
}
...
const injector = ReflectiveInjector.resolveAndCreate(
[MyService,
{
provide: 'name', useValue: 'my name'
}
], this.parentInjector);
另见https://angular.io/api/core/ReflectiveInjector#resolveAndCreate