Node.js 如果nestjs注入构造函数中已经存在的存储库类的实例,为什么需要@InjectRepository()?

Node.js 如果nestjs注入构造函数中已经存在的存储库类的实例,为什么需要@InjectRepository()?,node.js,nestjs,Node.js,Nestjs,我有一个TaskRepository类,它扩展了Repository类 import { EntityRepository, Repository } from 'typeorm'; import { Task } from './task.entity'; @EntityRepository(Task) export class TaskRepository extends Repository<Task> {} 在这里,nestjs将解决依赖性TaskRepository,

我有一个
TaskRepository
类,它扩展了
Repository

import { EntityRepository, Repository } from 'typeorm';
import { Task } from './task.entity';

@EntityRepository(Task)
export class TaskRepository extends Repository<Task> {}

在这里,nestjs将解决依赖性
TaskRepository
,它已经扩展了
Respository
类和
实体
已经被注入,所以它知道哪个实体存储库是为哪个实体存储的


为什么我们需要
@InjectRepository(TaskRepository)
在这里?

根据惯例,您的控制器不应直接与存储库通信。相反,请使用服务来执行此操作

控制器应仅用于将API定向到正确的服务。服务将与存储库通信,执行所需的请求并发送回响应

你的第一句话

我知道这门课是不需要的,因为我们可以做到以下几点

@Controller('tasks')
export class TasksController {
    
  constructor(
    @InjectRepository(Task)
    private readonly taskRepository: Repository<Task>
  ) {}
}
这是正确的。当您有自定义和复杂的数据库查询时,您需要创建客户存储库,否则您可以使用提供的存储库本身


虽然在控制器中导入存储库不是一个好的做法,但即使您这样做了。您只是将存储库的一个实例注入控制器。

根据约定,控制器永远不应与存储库直接通信。相反,请使用服务来执行此操作

控制器应仅用于将API定向到正确的服务。服务将与存储库通信,执行所需的请求并发送回响应

你的第一句话

我知道这门课是不需要的,因为我们可以做到以下几点

@Controller('tasks')
export class TasksController {
    
  constructor(
    @InjectRepository(Task)
    private readonly taskRepository: Repository<Task>
  ) {}
}
这是正确的。当您有自定义和复杂的数据库查询时,您需要创建客户存储库,否则您可以使用提供的存储库本身


虽然在控制器中导入存储库不是一个好的做法,但即使您这样做了。您只是将存储库的一个实例注入控制器。

而这不是他所要求的。你在回答一些他没有问的问题!是的,我的问题是,如果构造函数中已经有
私有taskRepository:TasRepository,
。Nestjs应该注入存储库的一个实例。为什么我们需要用
@InjectRepository(TaskRepository)
来装饰它,因为
TaskRepository
已经扩展了
存储库
,并且知道存储库是哪个实体的
@EntityRepository(Task)
?这不是他所要求的。你在回答一些他没有问的问题!是的,我的问题是,如果构造函数中已经有
私有taskRepository:TasRepository,
。Nestjs应该注入存储库的一个实例。为什么我们需要用
@InjectRepository(TaskRepository)
来装饰它,因为
TaskRepository
已经扩展了
Repository
,并且知道存储库是针对哪个实体的
@EntityRepository(Task)