Service Providers

Overview

Katal supports a Laravel-style Service Provider pattern for organizing application setup.

Use providers to register services/middleware/routes in one place.

Provider Class

import { ServiceProvider } from "katal";

export class AppServiceProvider extends ServiceProvider {
  register() {
    this.app.singleton("mailer", () => ({ send: () => {} }));
    this.app.middleware("auth-log", {
      before: (ctx) => {
        ctx.state.provider = "app";
        return null;
      },
    });
  }

  boot() {
    this.app.group("/provider", (router) => {
      class PingController {
        async handle() {
          return new Response("pong");
        }
      }
      router.get("/ping", PingController as any);
    });
  }
}

Registration

const app = new Application({ port: 3000 });
app.registerProvider(AppServiceProvider);
// or app.registerProvider(new AppServiceProvider(app));

Lifecycle

  • register() runs during app.boot() before plugin boot stage.
  • boot() runs during app.boot() after plugin boot stage.

Multiple Providers

app.registerProviders([
  AppServiceProvider,
  AuthServiceProvider,
]);

---

## See Also

- [Plugins](PLUGINS.md)
- [Dependency Injection](DI.md)
- [Application & Router](CORE.md)