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.