Nextjs Provider(Withロールと実装)
Nestjsのカスタマー・プロバイダとは?(Withロールと実装)
サンプルコードはgithubにあります!
Goal
カスタマー・プロバイダがなぜ現れたのかを理解する
カスタマー・プロバイダの使用方法
なぜカスタマープロバイダが必要ですか?
前の文章に記載されているように、
NestJs
はSpring
とは異なり、Interface
タイプはProvider
に登録できません.調べてみると、すでにissueに問い合わせが登録されており、この
issue
は以下の回答とともに閉鎖されている.まとめてみると、
Typescript
で定義されたInterface
はコンパイル後に消失するため、Interface
タイプはDIを受け入れることができない.ではNestjs役と実現に分けられないのでしょうか?
結論から言えば分けられる.△Springと同様に、
Interface
の実装と@Bean
の追加に比べて、少し面倒になるかもしれません.まず、
@Component
をInterface
として登録すると、次のようになる.//ant-service.interface.ts
export interface AntService {
work(): void
}
//ant.service.ts
@Injectable()
export class AntServiceImpl implements AntService{
work(): void {
console.log('working hardly');
}
}
//ant.moduel.ts
@Module({
controllers: [AntController],
providers: [
AntService
]
})
export class AntModule {}
前述したように、codeを書くとProvider
が見えます...!Custom Providerを使用してキャラクタを実装から分離
compile error
は複数のNestJs
を提供し、そのうちのCustom Provider
を利用して分離します.ClassProvider
が提供するNestJs
は以下の通りである.export interface ClassProvider<T = any> {
// export declare type InjectionToken = string | symbol | Type<any> | Abstract<any> | Function;
provide: InjectionToken;
useClass: Type<T>;
scope?: Scope;
}
上記のClassProvider Interface
に従ってInterface
を作成し、CustomProvider
に登録することができます.上記のModule
を使用してサンプルコードを記述します.const antService: ClassProvider = {
provide: 'antService',
useClass: AntServiceImpl
}
@Module({
controllers: [AntController],
providers: [
antService
]
})
export class AntModule {}
このように、AntService
を用いてClassProvider
が作成され、CustomProvider
に登録されている.では、このModule
を使用する場合は、以下のようなキャラクター(Provider
)タイプでInterface
を入力すればよい.@Controller('ant')
export class AntController {
// 이전과 달리 구현class를 의존하는 것이 아닌 interface를 의존할 수 있게 되었다.
constructor(@Inject('antService') private readonly antService: AntService){}
@Get()
excuteWork(){
this.antService.work();
}
}
Provider
を使用する前に、Custom Provider
はAntController
に直接注入されて使用される.AntServiceImpl
を用いて依存性を低減し、その後Custom Provider
の実装体が変更されてもAntService
で変更すればよい.整理する
AntModule
を用いて、Custom Provider
の中でNest
と역할
をどのように区分すべきかを考察した.(구현
の使用方法または詳細は、Custom Providerにおいて見出すことができる.)コード構造は
Custom Provider
と역할
に分けられ,その後拡張可能である.また、구현
を修正する作業は減少します.Client Code
を記述する場合、Test Code
に依存するため、実装対象をカプセル化してテストすることができる.(テストに関する記事を書くときは、Interface
を使用してユニットテストを行います.)Reference
https://docs.nestjs.com/fundamentals/custom-providers#custom-providers
https://wikidocs.net/150149
Reference
この問題について(Nextjs Provider(Withロールと実装)), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_leewoooo/NestJs-Provider-With-역할과-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol