const userRepositoryProvider = {
  provide: UserRepository, // abstract class
  useClass: ConcreteUserRepository, // concrete class
};

在模块A中,我提供并导出了一个类似上面的提供程序.(全部设置为可注射)

在另一个模块B中,我导入模块A,在模块B的服务中,我注入从模块A导入的提供程序,如下所示:

private readonly userRepo: UserRepository

当我构建和执行应用程序时,Nest没有解析依赖关系,告诉UserRepository是"?".


奇怪的是,当我将提供程序标记设置为字符串时:

const userRepositoryProvider = {
  provide: "UserRepository", // abstract class
  useClass: ConcreteUserRepository, // concrete class
};

并向提供程序注入如下内容:

@Inject("UserRepository") private readonly userRepo: UserRepository

它的工作完全符合我的预期,没有任何例外.

那么,它为什么会表现成这样呢?是不是有个窃听器?


最后,我提供了这两个抽象和具体的类.但我认为这并不重要,因为字符串提供令牌可以正常工作,而抽象类提供令牌则不能.

@Injectable()
export abstract class UserRepository {
  getUser(id: bigint): User {
    return User.create(id);
  }
}

@Injectable()
export class ConcreteUserRepository extends UserRepository {}
const userRepositoryProvider = {
  provide: UserRepository, // abstract class
  useClass: ConcreteUserRepository, // concrete class
};

在模块A中,我提供并导出了一个类似上面的提供程序.(全部设置为可注射)

在另一个模块B中,我导入模块A,在模块B的服务中,我注入从模块A导入的提供程序,如下所示:

private readonly userRepo: UserRepository

当我构建和执行应用程序时,Nest没有解析依赖关系,告诉UserRepository是"?".


奇怪的是,当我将提供程序标记设置为字符串时:

const userRepositoryProvider = {
  provide: "UserRepository", // abstract class
  useClass: ConcreteUserRepository, // concrete class
};

并向提供程序注入如下内容:

@Inject("UserRepository") private readonly userRepo: UserRepository

它的工作完全符合我的预期,没有任何例外.

那么,它为什么会表现成这样呢?是不是有个窃听器?


最后,我提供了这两个抽象和具体的类.但我认为这并不重要,因为字符串提供令牌可以正常工作,而抽象类提供令牌则不能.

@Injectable()
export abstract class UserRepository {
  getUser(id: bigint): User {
    return User.create(id);
  }
}

@Injectable()
export class ConcreteUserRepository extends UserRepository {}

  • properly working case enter image description here

  • improperly working case enter image description here

  • the error log enter image description here

推荐答案

虽然我还没有解决这个问题,但我发现Nest框架并不是直接原因.

我的服务器端应用程序在AWS Lambda环境上运行.

可能在转载、Bundle 或执行等过程中出现了一些问题.

当我得到原因时,我会更新这个.


我找到原因了..!事实上,我不知道根本原因,但我找到了解决办法.

I changed all my import paths to absolute paths.而且它起作用了.我认为问题发生在eBuildBundle 时间.

I had to inject all dependencies in constructors manually with @Inject()

Typescript相关问答推荐

如何在不使用变量的情况下静态判断运算式的类型?

TypScript如何在 struct 上定义基元类型?

当使用`type B = A`时,B的类型显示为A.为什么当`type B = A时显示为`any `|用A代替?

返回同时具有固定键和变量键的对象的函数的返回类型

使某些(嵌套)属性成为可选属性

使用打字Angular 中的通用数据创建状态管理

使用Dockerfile运行Vite React应用程序时访问env变量

为什么Typescript不能推断类型?

使用条件类型的类型保护

在React中定义props 的不同方式.FunctionalComponent

判断映射类型内的键值的条件类型

使用或属性编写无限嵌套的接口

react 路由不响应参数

使用来自API调用的JSON数据的Angular

如何在Deno中获取Base64图像的宽/高?

在REACT查询中获取未定义的isLoading态

在ts中获取级联子K类型?

React-Router V6 中的递归好友路由

TS2532:对象可能未定义

req.files = 未定义(Multer、Express、Typescript)