Reputation: 273
I created a class that needs a service:
export class RepositoryManager {
//...
private http: ApplicationHttpClient;
constructor() {
const injector = Injector.create({providers: [{provide: ApplicationHttpClient, deps: []}]});
this.http = injector.get(ApplicationHttpClient);
}
//...
}
However, the ApplicationHttpClient
service requires that the HttpClient
be passed to the constructor.
@Injectable()
export class ApplicationHttpClient {
//...
public constructor(public http: HttpClient) { }
//...
}
I tried to pass the HttpClient
as deps (RepositoryManager):
constructor() {
const injector = Injector.create({providers: [{provide: ApplicationHttpClient, deps: [HttpClient]}]});
this.http = injector.get(ApplicationHttpClient);
}
However, the following error occurred:
NullInjectorError: No provider for HttpClient!
[EDIT]
//...
imports: [
HttpClientModule,
//...
],
providers: [
{
provide: ApplicationHttpClient,
useFactory: ApplicationHttpClientCreator,
deps: [HttpClient]
},
HttpClient,
//...
],
Upvotes: 2
Views: 390
Reputation: 214017
First of all, you should import HttpClientModule
in your root AppModule
.
After that you have two options to create your custom injector:
constructor(parentInjector: Injector) {
const injector = Injector.create({
providers: [{ provide: ApplicationHttpClient, deps: [HttpClient] }],
parent: parentInjector
});
...
}
or
constructor(parentInjector: Injector) {
const injector = Injector.create(
[{ provide: ApplicationHttpClient, deps: [HttpClient] }],
parentInjector
);
...
}
Now DI system should be able to get HttpClient
instance through passed parent injector.
Tip: if you doubt which parameters method takes always look at method signature
Upvotes: 1