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

在我的NestJS应用程序中-

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

回答:

回答:

  • 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],

})

以上是 在NestJS中导入具有依赖注入的TypeScript模块 的全部内容, 来源链接: utcz.com/qa/417989.html

回到顶部