Nest js implements, injectable(DI) 알아보기
728x90
typescript implements
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { LoggerMiddleware } from './middlewares/logger.middleware';
@Module({
imports: [ConfigModule.forRoot({})], // module 을 불러왔으면 추가를 해줘야함
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): any {
consumer.apply(LoggerMiddleware).forRoutes('*');
}
}
implements 에 관한 보기 좋은 글
https://hyunseob.github.io/2016/10/17/typescript-interface/
injectable
@Injectable()
export class AppService {
getHello(): string {
return 'Hello'
}
}
Injectable 데코레이터를 사용하고있으면 provider 라는 형태를 띄는데 그렇게되면 해당 module에서 providers 에 넣어줘야한다.
@Module({
imports: [ConfigModule.forRoot({})], // module 을 불러왔으면 추가를 해줘야함
controllers: [AppController],
providers: [AppService, UserService],
}
nestjs dependency injection 는 providers 를 보고 controller 에 Service 들을 넣어줍니다.
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
appSerivce 가 타입만 명시하였지만 this.Service.getHello 를 쓸수 있는 이유였습니다.
Serivce 를 provider 를 이용하여 매개변수처럼 받아 사용하는 이유는 test 를 용이 하게 하게끔 하는 이유도 있지만
객체를 내부에서 만들어서 객체에서 의존하면 결합성이 강해져서 단일 책임분리가 어긋나게 됩니다.
728x90
'TypeScript' 카테고리의 다른 글
Typescript Interface (0) | 2021.11.28 |
---|---|
Typescript Class (0) | 2021.11.27 |
typeorm database migration (0) | 2021.06.24 |
Nestjs 에서 Swagger 사용하기 (0) | 2021.06.24 |
타입 스크립트 프로젝트 만들기 (0) | 2020.12.09 |
댓글
이 글 공유하기
다른 글
-
Typescript Class
Typescript Class
2021.11.27 -
typeorm database migration
typeorm database migration
2021.06.24 -
Nestjs 에서 Swagger 사용하기
Nestjs 에서 Swagger 사용하기
2021.06.24 -
타입 스크립트 프로젝트 만들기
타입 스크립트 프로젝트 만들기
2020.12.09