Service container menyimpan dependency dan layanan inti aplikasi. Binding dapat berupa factory biasa, singleton, instance, atau alias.
Container
app.bind('billing', (app) => new BillingService(app.make('db')));
app.singleton('metrics', () => new MetricsClient());
app.instance('release', '0.2.0');
app.alias('database', 'db');
const billing = app.make('billing');
app.call() menjalankan function atau pasangan class-method dan menyelesaikan dependency yang dapat dikenali container.
Service provider
Provider memiliki method register() untuk binding dan boot() untuk pekerjaan setelah seluruh provider terdaftar.
import { ServiceProvider } from '../../framework/Foundation/ServiceProvider.js';
export class BillingServiceProvider extends ServiceProvider {
register() {
this.app.singleton('billing', (app) => new BillingService(app.make('db')));
}
async boot() {
// Daftarkan listener atau lakukan bootstrap tambahan.
}
}
Tambahkan provider ke bootstrap/providers.js.
Event
app.make('events').listen('user.registered', async (user) => {
await sendWelcomeEmail(user);
});
await app.make('events').dispatch('user.registered', user);
Cache
Memory cache berlaku selama proses aplikasi hidup.
const users = await app.make('cache').remember('users.active', 60, () => {
return User.query().where('active', true).get();
});
app.make('cache').forget('users.active');
app.make('cache').flush();
Logging dan filesystem
app.make('log').info('Invoice created', { invoiceId: 10 });
await app.make('files').put('storage/app/report.txt', 'Selesai');
Encryption
const encrypted = app.make('crypt').encrypt({ token: 'sensitive' });
const original = app.make('crypt').decrypt(encrypted);
Encryption memerlukan APP_KEY yang valid. Untuk password, selalu gunakan layanan hash, bukan crypt.