MST
星途 面试题库

面试题:TypeScript中装饰器如何与依赖注入结合实现简单的服务注入

假设我们有一个简单的用户服务`UserService`,用于获取用户信息。请使用TypeScript的装饰器和依赖注入机制,将`UserService`注入到一个`UserController`类中,展示如何在`UserController`的方法中调用`UserService`的功能。请写出关键代码,并简要说明装饰器和依赖注入在这里的作用。
33.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 关键代码
    • 首先定义UserService
class UserService {
    getUserInfo() {
        return "User information";
    }
}
  • 然后定义依赖注入装饰器:
function inject(service: any) {
    return function (target: any, key: string) {
        target[key] = new service();
    };
}
  • 接着定义UserController并使用装饰器注入UserService
class UserController {
    @inject(UserService)
    userService: UserService;

    getUser() {
        return this.userService.getUserInfo();
    }
}
  1. 装饰器的作用
    • 装饰器inject在这里起到了自动实例化并将UserService注入到UserController类的特定属性(userService)中的作用。它是一种元编程的方式,通过在类的属性上使用装饰器语法,使得代码在结构上更加清晰,依赖关系更加明确。
  2. 依赖注入的作用
    • 依赖注入使得UserController类不需要自己去实例化UserService,从而降低了UserControllerUserService的耦合度。如果UserService的实现发生变化,例如需要替换为另一种获取用户信息的方式,只需要在UserService内部修改,而UserController无需改变,提高了代码的可维护性和可测试性。同时,依赖注入也使得代码更加灵活,便于进行单元测试,可以轻松地替换成模拟的UserService进行测试。