首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular 10.1“这个构造函数与依赖注入不兼容。

Angular 10.1“这个构造函数与依赖注入不兼容。
EN

Stack Overflow用户
提问于 2021-02-19 18:29:10
回答 2查看 663关注 0票数 0

在我的项目中,我尝试将微调服务从组件中移出,现在我收到了Error: This constructor was not compatible with Dependency Injection.消息。但VSCode林特什么也没说。

完整的错误消息如下:

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
@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文件:

代码语言:javascript
运行
复制
@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包,但这是构造函数:

代码语言:javascript
运行
复制
@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的解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-19 19:17:20

通过使用@Injectable({ providedIn: 'root' }),您可以告诉Angular创建AppDataService的一个实例,以便将其添加到根模块的提供者中。但是,它不知道如何使用构造函数创建此实例,因为它不能为模型注入T实例。

票数 1
EN

Stack Overflow用户

发布于 2021-03-10 03:30:50

同样的问题,因为在继承类中忘记了super()调用。别忘了这一点。

代码语言:javascript
运行
复制
@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);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66275841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档