Xiaoman Nestjs (第 10 章 Nestjs プロバイダー)

プロバイダ

プロバイダーは Nest 基本的な概念です。、  、  など多くの基本 Nest クラスはプロバイダと見なすことができます 。それらはすべて、 依存関係を注入することで利用できます。これは、オブジェクトが相互にさまざまな関係を作成できること、およびオブジェクト インスタンスを「接続」する機能の大部分を ランタイム システムに委譲できることを意味します。 Provider は、デコレータで注釈が付けられた単なる クラスです。service repositoryfactoryhelperconstructor Nest@Injectable()

1. 基本的な使い方

モジュールはサービスを導入し、プロバイダーに注入します 

コントローラーで注入されたサービスを使用できます 

 

2.サービス(カスタム名)の2回目の利用

最初の使用法はシンタックス シュガーです

実は彼のフルネームは

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }]
})
export class UserModule { }

 名前をカスタマイズした後、対応する Inject を使用してそれを取得する必要があります。そうしないと、名前が見つかりません。

 3. カスタム注入値

useValue 経由

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  }]
})
export class UserModule { }

 

 3.ファクトリーモード

サービス間に依存関係や論理的な処理がある場合は、useFactory を使用できます。

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserService2 } from './user.service2';
import { UserService3 } from './user.service3';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  },
    UserService2,
  {
    provide: "Test",
    inject: [UserService2],
    useFactory(UserService2: UserService2) {
      return new UserService3(UserService2)
    }
  }
  ]
})
export class UserModule { }

 

 4.非同期モード

useFactory は promise またはその他の非同期操作を返します

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserService2 } from './user.service2';
import { UserService3 } from './user.service3';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  },
    UserService2,
  {
    provide: "Test",
    inject: [UserService2],
    useFactory(UserService2: UserService2) {
      return new UserService3(UserService2)
    }
  },
  {
    provide: "sync",
    async useFactory() {
      return await  new Promise((r) => {
        setTimeout(() => {
          r('sync')
        }, 3000)
      })
    }
  }
  ]
})
export class UserModule { }

 

おすすめ

転載: blog.csdn.net/qq1195566313/article/details/126494064