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