在NestJS中导入具有依赖注入的TypeScript模块
在我的NestJS应用程序中-
我有TypeScript类,这些类中已经注入了其他类和值。唯一的是,我要导入带有import
语句的TypeScript类,并使用DI系统注入它们。有什么方法可以删除导入语句并让DI系统处理它?
回答:
回答:
import
->类参考- DI->类实例化
- 可以通过字符串标记进行匹配,但最好使用类引用。
回答:
依赖项注入系统主要处理类的实例化。这很好,因为您不必关心要注入的类所需的可传递依赖项。
例如:我想用UserService
我的UserController
。在UserService
需要UserModel
进行实例化。但是,此二级依赖项隐藏在中UserController
。这很棒,因为当UserService
获得新的依赖项(例如)时LoggingService
,UserController
不必更改。
所以代替
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