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