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

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

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

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

完整的错误消息如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
@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
代码运行次数:0
运行
AI代码解释
复制
@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
代码运行次数:0
运行
AI代码解释
复制
@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 11:17:20

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

票数 1
EN

Stack Overflow用户

发布于 2021-03-09 19:30:50

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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

复制
相关文章
Guice依赖注入(构造函数)
本教程主要详细讲解Guice的构造函数注入. 我们将通过详细的代码以及步骤进行讲解.
程序猿梦工厂
2021/08/19
7730
Spring的依赖注入 构造函数注入 Set注入
以后都交给spring来维护 在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明
韦恩少爷的背
2020/03/02
3.2K0
Angular 中依赖注入
我们都知道在 Angular 中如何使用服务 services 的标准方法。将服务标记为可注入并将其放入模块中的 provider 部分中。如下:
Jimmy_is_jimmy
2022/09/26
6690
Angular 中依赖注入
Angular依赖注入详解
依赖注入的基本思想是:将组件所依赖的服务提供者注入进来,而不是在组件内部直接创建。
坑吭吭
2023/10/16
2920
Angular 依赖注入简介
在介绍依赖注入的概念和作用前,我们先来看个例子。各位同学请睁大眼睛,我要开始 “闭门造车” 了。
阿宝哥
2019/11/05
7160
使用Angular的依赖注入
Service 的表现形式是一个class,可以用来在组件中复用 比如 Http 请求获取数据,日志处理,验证用户输入等都写成Service,供组件使用。
mafeifan
2019/06/15
1K0
Angular 依赖注入 初认
服务是什么概念?可以简单地认为它是一个功能模块,重要在于它是单例对象,并且可以注入到其他的地方使用。
mafeifan
2019/07/01
4950
@Autowired:构造函数注入和变量注入
public TestController(TestService testService) {
chenchenchen
2019/09/03
5.7K0
IOC容器-构造函数注入、属性注入、接口注入
今天我们详细了解一下spring框架中IOC的作用。IOC的英文名叫Inverse of Control,中文名叫控制反转也可以叫依赖注入,是spring容器的内核。AOP、事务等功能都依赖于此技术。IoC说白了,就是将对象与对象之间的依赖关系从代码中转移到spring的配置文件中,从而由spring进行对象声明周期的管理。这样的好处就是降低了对象与对象之间的依赖。IoC的工作原理就是利用Java的反射功能实例化对象与对象的依赖。除此之外,IoC容器还提供了对象的实例缓存、生命周期管理、对象实例代理、事件发布、资源装载等高级功能。
吉林乌拉
2019/08/14
4.5K0
@Autowired依赖注入为啥不推荐了
这几天更新升级了一下java编码神器IDEA,升级完进行日常开发,可能是以前用的IDEA版本比较老旧,升级之后发现之前的日常写法有了个warning提醒。来看图:
botkenni
2022/09/07
1.5K0
@Autowired依赖注入为啥不推荐了
Angular 6+依赖注入使用指南:providedIn与providers对比
本文由达观数据研究院根据《Total Guide To Angular 6+ Dependency Injection — providedIn vs providers》编译,如有不当,还请指正。 Angular 6为我们提供了更好的语法——provideIn,用于将服务注册到Angular依赖注入机制中。 然而,新语法带来了非常多使用上的困惑,在GitHub评论,Slack和Stack Overflow上看到一些开发者经常混淆。所以现在,让我们把这一切都说清楚。
达观数据
2019/11/22
2.8K0
Angular 6+依赖注入使用指南:providedIn与providers对比
spring 依赖注入总结--为什么官方推荐构造器注入
公司小伙伴使用了构造器注入,说是spring的官方推荐。但是,我问了三个问题,他都答不出来,感觉能写篇博文。
ydymz
2019/03/06
2.6K0
spring 依赖注入总结--为什么官方推荐构造器注入
点击加载更多

相似问题

为什么我得到“这个构造函数与角度依赖注入不兼容”

141

错误:此构造函数与角度依赖注入不兼容。

12

角9“错误:此构造函数与依赖注入不兼容。

43

角常春藤-构造函数与角度依赖注入不兼容

23

此构造函数与角依赖注入不兼容,除非它还可以。

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文