Libraries
    Preparing search index...

    Class ServiceCollection

    A mutable collection of service registrations. Build up the collection by calling addSingleton, addScoped, or addTransient, then call buildServiceProvider to create an immutable ServiceProvider.

    Schema instances act as service keys via reference equality — the same schema object used during registration must be used during resolution.

    import { ServiceCollection } from '@cleverbrush/di';
    import { object, string, number, func } from '@cleverbrush/schema';

    const IConfig = object({ port: number(), host: string() });
    const ILogger = object({ info: func() });

    const services = new ServiceCollection();
    services.addSingleton(IConfig, { port: 3000, host: 'localhost' });
    services.addSingleton(ILogger, () => ({ info: console.log }));

    const provider = services.buildServiceProvider();
    const config = provider.get(IConfig); // { port: number; host: string }
    const IGreeter = object({ greet: func() });
    const greeterFactory = func()
    .addParameter(IConfig)
    .addParameter(ILogger);

    services.addSingletonFromSchema(
    IGreeter,
    greeterFactory,
    (config, logger) => ({
    greet() { logger.info(`Hello from ${config.host}`); }
    })
    );
    Index

    Constructors

    Methods

    • Registers a service with Singleton lifetime. The factory (or value) is called at most once; every subsequent resolution returns the same instance.

      Type Parameters

      • TSchema extends SchemaBuilder<any, any, any, any, any>

      Parameters

      Returns this

      this for chaining.

      services.addSingleton(ILogger, (provider) => {
      const config = provider.get(IConfig);
      return new ConsoleLogger(config.logLevel);
      });
      services.addSingleton(IConfig, { port: 3000, host: 'localhost' });
      
    • Registers a Singleton service whose dependencies are described by a FunctionSchemaBuilder. The container resolves each parameter schema from the registry and passes the resolved values to implementation.

      Type Parameters

      • TTargetSchema extends SchemaBuilder<any, any, any, any, any>
      • TFuncSchema extends FunctionSchemaBuilder<any, any, any, any, any, any, undefined, any>

      Parameters

      Returns this

      this for chaining.

      const IGreeter = object({ greet: func() });

      const greeterDeps = func()
      .addParameter(IConfig)
      .addParameter(ILogger);

      services.addSingletonFromSchema(
      IGreeter,
      greeterDeps,
      (config, logger) => ({
      greet() { logger.info(`Hello from ${config.host}`); }
      })
      );
    • Registers a pre-created instance as a Singleton. Unlike addSingleton, the second argument is always treated as the service value — never as a factory function. This makes it safe to register a function-typed service (e.g. a schema backed by func()) without the container accidentally invoking it as a factory.

      Type Parameters

      • TSchema extends SchemaBuilder<any, any, any, any, any>

      Parameters

      Returns this

      this for chaining.

      const config = { port: 3000, host: 'localhost' };
      services.addSingletonInstance(IConfig, config);
      const IHandler = func();
      const myHandler = (req: Request) => new Response('ok');
      services.addSingletonInstance(IHandler, myHandler);