当前位置: 首页 > 面试题库 >

在NestJS中导入具有依赖注入的TypeScript模块

经国安
2023-03-14
问题内容

在我的NestJS应用程序中-
我有TypeScript类,这些类中已经注入了其他类和值。唯一的是,我要导入带有import语句的TypeScript类,并使用DI系统注入它们。有什么方法可以删除导入语句并让DI系统处理它?


问题答案:

TL; DR

  • import ->类参考
  • DI->类实例化
  • 可以通过字符串标记进行匹配,但最好使用类引用。

封装形式

依赖项注入系统主要处理类的实例化。这很好,因为您不必关心要注入的类所需的可传递依赖项。

例如:我想用UserService我的UserController。在UserService需要UserModel进行实例化。但是,此二级依赖项隐藏在中UserController。这很棒,因为当UserService获得新的依赖项(例如)时LoggingServiceUserController不必更改。

所以代替

class UserController {
  constructor() {
    const userModel = new UserModel();
    this.userService = new UserService(userModel);
  }
}

你可以做

class UserController {
  // the transitive dependency on UserModel is hidden
  constructor(private userService: UserService) {}
}

类参考

但是,为了让DI知道要注入的服务,您需要从@Inject声明到实际类的某个链接进行实例化。当然,这种机制取决于DI系统的实现。引用可以按名称(字符串匹配),按接口(DI决定使用哪种实现:UserService
-> UserServiceImpl/ MockUserServiceImpl)或在默认情况下由要实例化的类直接在nestjs中进行引用。

尽管在nestjs中可以按名称进行匹配,但是按类进行匹配是首选,因为它使重构更加容易。

创建自定义提供程序时,您可以选择要用于匹配的令牌类型。当您要注入值时(没有用于匹配的类),这是必需的

const connectionProvider = {
  provide: 'Connection',
  useValue: connection,
};

@Module({
  providers: [connectionProvider],
})

或动态实例化的类。

const configServiceProvider = {
  provide: ConfigService,
  useClass: process.env.NODE_ENV === 'development'
    ? DevelopmentConfigService
    : ProductionConfigService,
};

@Module({
  providers: [configServiceProvider],
})


 类似资料:
  • 问题内容: 当前在app.js中,我有以下路线: 如您所见,我正在尝试注入Path依赖项。尽管我收到一条错误消息,说找不到该提供程序。我认为这是因为配置模块提供程序首先执行。以下是“ services.js”中我的路径提供程序定义 我怎样才能将此提供程序注入配置模块? 问题答案: 在中,只能使用提供程序(例如)。在你只能使用服务(如实例)。您有一家工厂,而不是供应商。请参阅具有以下三种创建方式的代

  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto