在我的图书馆中,我使用以下代码提供服务:
import { Inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { DataInjectorModule } from '../../data-injector.module';
// @dynamic
@Injectable()
export class RemoteDataService<T> {
@Inject('env') private environment: any = {};
public type: new () => T;
constructor(
model: T,
) {
this.http = DataInjectorModule.InjectorInstance.get(HttpClient);
}
// ...
}
(data-injector.module
现有原因只是避免循环依赖):
import { NgModule, Injector } from '@angular/core';
// @dynamic
@NgModule({
declarations: [],
imports: [],
providers: [],
exports: [],
})
export class DataInjectorModule {
static InjectorInstance: Injector;
constructor(injector: Injector) {
DataInjectorModule.InjectorInstance = injector;
}
}
在我的库的主模块文件中:
import { ModuleWithProviders } from '@angular/compiler/src/core';
import { NgModule, Injector } from '@angular/core';
import { DataInjectorModule } from './data-injector.module';
import { RemoteDataService } from './services/remote-data/remote-data.service';
// @dynamic
@NgModule({
declarations: [],
imports: [
DataInjectorModule,
],
providers: [],
exports: [],
})
export class DataCoreModule {
static InjectorInstance: Injector;
constructor(injector: Injector) {
DataCoreModule.InjectorInstance = injector;
}
public static forRoot(environment: any): ModuleWithProviders {
return {
ngModule: DataCoreModule,
providers: [
RemoteDataService,
{ provide: 'env', useValue: environment }
]
};
}
}
最后在我的应用程序中app.module.ts
:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { DataCoreModule } from 'data-core';
import { AppRoutingModule } from './app-routing.module';
import { environment } from 'src/environments/environment';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
DdataCoreModule.forRoot(environment),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
构建顺利,但在浏览器中我收到此错误:
Error: Can't resolve all parameters for RemoteDataService: (?).
at getUndecoratedInjectableFactory (core.js:11338)
at injectableDefOrInjectorDefFactory (core.js:11328)
at providerToFactory (core.js:11371)
at providerToRecord (core.js:11358)
at R3Injector.processProvider (core.js:11256)
at core.js:11230
at core.js:1146
at Array.forEach (<anonymous>)
at deepForEach (core.js:1146)
at R3Injector.processInjectorType (core.js:11230)
我在 StackOverflow 中检查了关于这个主题的几个问题,就像这样,但几乎在所有地方都只是@Injectable()
缺少的部分,但在这种情况下,我使用了这个装饰器。
知道如何解决这个问题吗?