Providers
「最近」の基本カテゴリには、「サービス」、「Repository」、「Factory」、「Helper」などがあり、「プロバイダ」とみなされます.
提供者の主な考え方は,従属関係を注入できることである.
すなわち、オブジェクトは互いに異なる関係を作成することができ、ほとんどの場合、オブジェクトインスタンスを最近のランタイムシステムに関連付けます.
コントローラはHTTPリクエストを処理し、より複雑なタスクをプロバイダに委任します.
Providerは、モジュールで
このようにNestjsはオブジェクト向けのプログラミングが可能であり,SOLIDの原則に従うことが望ましい.
このサービスはデータの保存と取得を担当し、CatsController用に設計されています.
プロバイダの一種.
このサービスクラスは、
クラスは依存関係に注入できますが、渡されていない場合はデフォルト値を使用する必要があります.
この場合、プロバイダがなくてもエラーが発生しないように、ユーザに依存関係を選択させることができる.
プロバイダがオプションである場合、
これまで用いられてきた技術は,プロバイダが構造関数法により注入するため,構造関数に基づく注入と呼ばれている.
特殊な場合には、それ以外にも属性ベースの注入方式を用いることができる.
たとえば、最上位クラスが1つ以上のプロバイダに依存している場合、生成者のサブクラスから
プロバイダが定義され、サービスを使用するコントローラが確保されたため、注入を実行するために「次へ」にサービスを登録する必要があります.モジュールファイルを編集し、
このようにすると、ディレクトリ構造は次のようになります.
リファレンス
提供者の主な考え方は,従属関係を注入できることである.
すなわち、オブジェクトは互いに異なる関係を作成することができ、ほとんどの場合、オブジェクトインスタンスを最近のランタイムシステムに関連付けます.
コントローラはHTTPリクエストを処理し、より複雑なタスクをプロバイダに委任します.
Providerは、モジュールで
provider
と宣言されている一般的なJavaScriptクラスです.このようにNestjsはオブジェクト向けのプログラミングが可能であり,SOLIDの原則に従うことが望ましい.
Services
CatsService
を例に挙げます.このサービスはデータの保存と取得を担当し、CatsController用に設計されています.
プロバイダの一種.
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
export interface Cat {
name: string;
age: number;
breed: string;
}
このサービスは、1つのプロパティと2つのメソッドを持つベースクラスです.@Injectable()
デコーダは、サービスがNest IoCコンテナによって管理可能なクラスであることを示すサービスをメタデータに添付する.(Nest管理)このサービスクラスは、
Cat
インターフェースを使用する.CatsController
で使用されます.import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
CatsService
はジェネレータを介して注入される.private
キーワードを使用すると、宣言と同時にCatsService
を初期化できます.Optional Providers
クラスは依存関係に注入できますが、渡されていない場合はデフォルト値を使用する必要があります.
この場合、プロバイダがなくてもエラーが発生しないように、ユーザに依存関係を選択させることができる.
プロバイダがオプションである場合、
@Optional()
データレコーダは、ジェネレータの識別において使用することができる.import { Injectable, Optional, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}
上記の例では、HTTP_OPTIONS
Custom Tokenを含むCustom Providerを使用します.Property-based Injection
これまで用いられてきた技術は,プロバイダが構造関数法により注入するため,構造関数に基づく注入と呼ばれている.
特殊な場合には、それ以外にも属性ベースの注入方式を用いることができる.
たとえば、最上位クラスが1つ以上のプロバイダに依存している場合、生成者のサブクラスから
super()
を呼び出してすべてのプロバイダを渡すことは無効である可能性があります.このため、@Inject()
データレコーダは、属性レベルで使用することができる.import { Injectable, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
@Inject('HTTP_OPTIONS')
private readonly httpClient: T;
}
Provider Registration
プロバイダが定義され、サービスを使用するコントローラが確保されたため、注入を実行するために「次へ」にサービスを登録する必要があります.モジュールファイルを編集し、
@Module()
デコーダのproviders
アレイにサービスを追加します.import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class AppModule {}
NestはCatsController
クラスの従属関係を解決できるようになった.(CatsController
DI CatsService
なのでモジュールに登録します)このようにすると、ディレクトリ構造は次のようになります.
リファレンス
https://docs.nestjs.kr/providers
Reference
この問題について(Providers), 我々は、より多くの情報をここで見つけました
https://velog.io/@alwayslee_12/Providers
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Providers), 我々は、より多くの情報をここで見つけました https://velog.io/@alwayslee_12/Providersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol