在我的项目中,我尝试将微调服务从组件中移出,现在我收到了Error: This constructor was not compatible with Dependency Injection.
消息。但VSCode林特什么也没说。
完整的错误消息如下:
Error: This constructor was not compatible with Dependency Injection.
at Module.ɵɵinvalidFactory (core.js:14675)
at Object.AppDataService_Factory [as factory] (app-data.service.ts:36)
at R3Injector.hydrate (core.js:11289)
at R3Injector.get (core.js:11111)
at NgModuleRef$1.get (core.js:24243)
at R3Injector.get (core.js:11122)
at NgModuleRef$1.get (core.js:24243)
at Object.get (core.js:22142)
at getOrCreateInjectable (core.js:4079)
at Module.ɵɵdirectiveInject (core.js:14651)
...but app-data.service.ts:36
只是一个函数的结尾。(我在下面做了标记。)
banner.component.ts
文件:
@Component({
selector: 'app-banner-list',
templateUrl: './banner-list.component.html',
styleUrls: ['./banner-list.component.scss']
})
export class BannerListComponent extends BaseListComponent<BannerInterface> implements OnInit, OnDestroy {
constructor(
private appDataService: AppDataService<BannerInterface>,
private helpreService: HelperService,
) {
super(Banner);
}
// ...
loadDatas(): Observable<any> {
// create observable function
const getAll$ = this.appDataService.proxy.getAll().pipe(
map((result: any) => {
// ...
}),
);
return this.appDataService.start(getAll$, 'banner getAll');
}
}
app-data.service.ts
文件:
@Injectable({
providedIn: 'root'
})
export class AppDataService<T extends BaseModelInterface<T>> {
private spinner: SpinnerServiceInterface = AppModule.InjectorInstance.get(SpinnerService);
proxy: ProxyServiceInterface<T> = new ProxyService(this.model);
constructor(
private model: T,
) { }
start(pipeInstance: Observable<any>, spinnerName: string = 'spinner'): Observable<any> {
return of(1).pipe(
// switch on spinner
tap(() => this.spinner.on(spinnerName)),
// run observable pipe instance
switchMap(() => pipeInstance),
// switch off spinner
tap(() => this.spinner.off(spinnerName)),
);
} // <--------- this is the 36. line
}
ProxyService
来自ddata-core
包,但这是构造函数:
@Injectable()
export class ProxyService<T extends BaseModelInterface<T>> extends DataServiceAbstract<T> {
private type: new () => T;
constructor(
private instance: T,
) {
super(instance);
// ...
}
getAll(pageNumber: number = 0): Observable<any> {
// ...
}
}
我受不了这个了。你知道我应该在哪里寻找his constructor was not compatible with Dependency Injection
的解决方案吗?
发布于 2021-02-19 11:17:20
通过使用@Injectable({ providedIn: 'root' })
,您可以告诉Angular创建AppDataService
的一个实例,以便将其添加到根模块的提供者中。但是,它不知道如何使用构造函数创建此实例,因为它不能为模型注入T
实例。
发布于 2021-03-09 19:30:50
同样的问题,因为在继承类中忘记了super()
调用。别忘了这一点。
@Injectable({ providedIn: 'root' })
@StoreConfig({ name: fictive })
class FictiveStore extends AppModelStore {
// !!!!!!!!!!!!! Forgotten to put that here
constructor() {
super();
}
}
export abstract class AppModelStore extends Store {
constructor() {
// Initial state
super(initial);
}
}
https://stackoverflow.com/questions/66275841
复制相似问题