Skip to content

Service Providers

Service Providers are the central place to configure and bootstrap your application.

Work in Progress

This feature is currently under development. Documentation will be available soon.

Overview

Service Providers are the primary mechanism for organizing and bootstrapping your application's services. They allow you to:

  • Register services in the container
  • Bootstrap application components
  • Configure third-party packages
  • Set up middleware
  • Define route bindings

Basic Structure

typescript
import { ServiceProvider } from '@curisjs/core';

export class AppServiceProvider extends ServiceProvider {
  /**
   * Register services in the container
   */
  register() {
    this.app.bind('UserRepository', UserRepository);
    this.app.singleton('Cache', RedisCache);
  }
  
  /**
   * Bootstrap application services
   */
  boot() {
    // Set up event listeners
    // Configure middleware
    // Load routes
  }
}

Registering Providers

typescript
import { Application } from '@curisjs/core';
import { AppServiceProvider } from './providers/AppServiceProvider';

const app = new Application();

// Register service provider
app.register(AppServiceProvider);

Built-in Providers

CurisJS includes several built-in service providers:

  • RouteServiceProvider - Registers routes
  • MiddlewareServiceProvider - Registers middleware
  • DatabaseServiceProvider - Configures database
  • ConfigServiceProvider - Loads configuration

Creating Custom Providers

typescript
export class EmailServiceProvider extends ServiceProvider {
  register() {
    this.app.singleton('mailer', () => {
      return new Mailer({
        driver: this.app.config.get('mail.driver'),
        from: this.app.config.get('mail.from'),
      });
    });
  }
  
  boot() {
    // Bootstrap email templates
    // Set up event listeners
  }
}

Deferred Providers

For performance, you can defer provider loading:

typescript
export class HeavyServiceProvider extends ServiceProvider {
  defer = true;
  
  provides() {
    return ['heavy.service'];
  }
  
  register() {
    this.app.singleton('heavy.service', HeavyService);
  }
}

Coming Soon

Full documentation will include:

  • Provider lifecycle hooks
  • Deferred provider loading
  • Provider dependencies
  • Publishing provider assets
  • Testing service providers
  • Best practices

Released under the MIT License.