728x90
반응형
우리가 이전에 배웠던 의존성 주입은 생성자 기반의 주입방식입니다. contructor를 통해서 주입을 하기 때문입니다. 하지만 이번 장에서는 ✨속성 기반 주입(property based injection)에 대해 같이 알아보도록 하겠습니다.
//propertyBase.catparentService.ts
export class catParentService{
constructor(private readonly testServiceA: TestServiceA){
}
testHello(): string{
return "hello world"
}
parentTest(): string{
return this.testServiceA.testHello();
}
}
// propertyBase.catchildService.ts
@Injectable()
export class catChildService extends catParentService{
constructor(private readonly tsA: TestServiceA){
super(tsA)
}
testHello(): string{
return this.parentTest()
}
}
// propertyBase.testServiceA.ts
@Injectable()
export class TestServiceA{
testHello(){
return "hello Test A";
}
}
@Controller("cat")
export class CatController{
constructor(
private readonly childService: catChildService
){}
@Get("propertyBase")
propertyBaseTest(): string{
return this.childService.testHello()
}
}
우리는 catChildService에서 super()를 사용하여 TestServiceA의 인스턴스를 전달해줄 수 있습니다. 그렇기에 " /cat/propertyBase"로 요청하면 "test hello A"라는 문구를 응답으로 받을 수 있습니다.
하지만 문제는 이런 경우가 발생할 때마다 super를 사용하는 것은 불편하기에 이런 상황에는 속성 기반 주입을 사용할 수 있습니다. 사용 방법은 굉장히 간단합니다. catParentService의 constructor 부분을 @Inject()로 대체하기면 하면 됩니다.
//propertyBase.catparentService.ts
export class catParentService{
@Inject(TestServiceA) private readonly testServiceA: TestServiceA;
testHello(): string {
return "hello world"
}
parentTest(): string {
return this.testServiceA.testHello();
}
}
//propertyBase.catchildService.ts
@Injectable()
export class catChildService extends catParentService {
testHello(): string{
return this.parentTest()
}
}
//propertyBase.testService.ts
@Injectable()
export class TestServiceA {
testHello(){
return "hello Test A"
}
}
위와 같이 코드를 살짝만 변경해주시면 됩니다. 방금 전에 요청했던 것처럼 "/cat/propertyBase" 로 Get() 요청을 보내면 "hello Test A" 라는 문구를 응답으로 받을 수 있습니다. constructor를 굳이 사용하지 않아서 편하긴 하네요 ㅎㅎ
728x90
반응형
'Nestjs' 카테고리의 다른 글
[Nestjs] 5-1. 공유 모듈 (shared modules) (0) | 2022.04.27 |
---|---|
[Nestjs] 5. 모듈(Module)에 대하여... (0) | 2022.04.24 |
[Nestjs] 4-2. DI(Dependency Injection)?? 의존성 주입?? (0) | 2022.04.21 |
[Nestjs] 4-1. 프로바이더와 서비스 (0) | 2022.04.10 |
[Nestjs] 4. 프로바이더 (0) | 2022.04.10 |