サービスプロバイダ
サービスプロバイダは、アプリケーションのさまざまなフェーズでアクションを実行するためのライフサイクルメソッドを持つプレーンなJavaScriptクラスです。
サービスプロバイダは、コンテナにバインディングを登録したり、既存のバインディングを拡張したり、HTTPサーバーの起動後にアクションを実行したりできます。
サービスプロバイダは、AdonisJSアプリケーションのエントリーポイントであり、アプリケーションが準備完了と見なされる前にアプリケーションの状態を変更する能力を持っています。
プロバイダは、adonisrc.ts
ファイルのproviders
配列内に登録されます。値はサービスプロバイダを遅延インポートするための関数です。
{
providers: [
() => import('@adonisjs/core/providers/app_provider'),
() => import('./providers/app_provider.js'),
]
}
デフォルトでは、プロバイダはすべてのランタイム環境でロードされます。ただし、特定の環境でのみプロバイダを実行することもできます。
{
providers: [
() => import('@adonisjs/core/providers/app_provider'),
{
file: () => import('./providers/app_provider.js'),
environment: ['web', 'repl']
}
]
}
サービスプロバイダの作成
サービスプロバイダは、アプリのproviders
ディレクトリ内に格納されます。または、node ace make:provider app
コマンドを使用することもできます。
プロバイダモジュールは、プロバイダクラスを返すexport default
ステートメントを持つ必要があります。クラスのコンストラクタは、Applicationクラスのインスタンスを受け取ります。
参照: プロバイダ作成コマンド
import { ApplicationService } from '@adonisjs/core/types'
export default class AppProvider {
constructor(protected app: ApplicationService) {
}
}
以下は、さまざまなアクションを実行するために実装できるライフサイクルメソッドです。
export default class AppProvider {
register() {
}
async boot() {
}
async start() {
}
async ready() {
}
async shutdown() {
}
}
register
register
メソッドは、プロバイダクラスのインスタンスが作成された後に呼び出されます。register
メソッドでは、IoCコンテナ内にバインディングを登録できます。
register
メソッドは同期的なので、このメソッド内ではPromiseを使用することはできません。
export default class AppProvider {
register() {
this.app.container.bind('db', () => {
return new Database()
})
}
}
boot
boot
メソッドは、すべてのバインディングがIoCコンテナに登録された後に呼び出されます。このメソッド内では、コンテナからバインディングを解決して拡張/変更できます。
export default class AppProvider {
async boot() {
const validator = await this.app.container.make('validator')
// カスタムのバリデーションルールを追加
validator.rule('foo', () => {})
}
}
バインディングがコンテナから解決されたときにバインディングを拡張するのは良い習慣です。たとえば、バリデータにカスタムルールを追加するためにresolving
フックを使用できます。
async boot() {
this.app.container.resolving('validator', (validator) => {
validator.rule('foo', () => {})
})
}
start
start
メソッドは、boot
メソッドの後およびready
メソッドの前に呼び出されます。ready
フックアクションで必要なアクションを実行できます。
ready
ready
メソッドは、アプリケーションの環境に基づいて異なるステージで呼び出されます。
web |
ready メソッドは、HTTPサーバーが起動してリクエストを受け付ける準備ができた後に呼び出されます。 |
console |
ready メソッドは、メインコマンドのrun メソッドの直前に呼び出されます。 |
test |
ready メソッドは、すべてのテストを実行する直前に呼び出されます。ただし、テストファイルはready メソッドよりも前にインポートされます。 |
repl |
ready メソッドは、REPLプロンプトがターミナル上に表示される前に呼び出されます。 |
export default class AppProvider {
async start() {
if (this.app.getEnvironment() === 'web') {
}
if (this.app.getEnvironment() === 'console') {
}
if (this.app.getEnvironment() === 'test') {
}
if (this.app.getEnvironment() === 'repl') {
}
}
}
shutdown
shutdown
メソッドは、AdonisJSがアプリケーションを正常に終了している最中に呼び出されます。
アプリケーションの終了イベントは、アプリが実行されている環境とアプリケーションプロセスの開始方法によって異なります。詳細については、アプリケーションライフサイクルガイドを参照してください。
export default class AppProvider {
async shutdown() {
// クリーンアップを実行する
}
}