Helpers for common DI container operations using Awilix.

Simplifies registration of commands, queries, and common services following Stratix patterns.

import { createContainer } from '@stratix/runtime';
import { ContainerHelpers } from '@stratix/runtime';

const container = createContainer();

// Register multiple commands at once
ContainerHelpers.registerCommands(container, commandBus, [
{ commandType: CreateProductCommand, handler: CreateProductHandler },
{ commandType: UpdateProductCommand, handler: UpdateProductHandler }
]);

Constructors

Methods

  • Registers default infrastructure services in the container.

    Registers common services like command bus, query bus, event bus, and logger with sensible defaults for development and testing.

    Parameters

    • container: AwilixContainer

      The Awilix DI container

    • options: { useInMemoryBuses?: boolean; logger?: any } = {}

      Optional configuration for default services

      • OptionaluseInMemoryBuses?: boolean

        Whether to use in-memory buses (default: true).

      • Optionallogger?: any

        Custom logger instance.

    Returns void

    import { createContainer } from '@stratix/runtime';
    const container = createContainer();
    ContainerHelpers.registerDefaults(container, {
    useInMemoryBuses: true,
    logger: new ConsoleLogger()
    });
  • Registers multiple commands and their handlers with the command bus.

    Simplifies bulk registration of command handlers following Stratix patterns.

    Parameters

    • container: AwilixContainer

      The Awilix DI container

    • commandBus: { register: (commandType: any, handler: any) => void }

      The command bus instance

    • registrations: CommandRegistration[]

      Array of command registrations

    Returns void

    ContainerHelpers.registerCommands(container, commandBus, [
    {
    commandType: CreateProductCommand,
    handler: CreateProductHandler, // Class for auto-wiring
    singleton: false
    },
    {
    commandType: UpdateProductCommand,
    handler: new UpdateProductHandler(repo), // Instance
    singleton: true
    }
    ]);
  • Registers multiple queries and their handlers with the query bus.

    Simplifies bulk registration of query handlers following Stratix patterns.

    Parameters

    • container: AwilixContainer

      The Awilix DI container

    • queryBus: { register: (queryType: any, handler: any) => void }

      The query bus instance

    • registrations: QueryRegistration[]

      Array of query registrations

    Returns void

    ContainerHelpers.registerQueries(container, queryBus, [
    {
    queryType: GetProductByIdQuery,
    handler: GetProductByIdHandler, // Class for auto-wiring
    singleton: true
    },
    {
    queryType: ListProductsQuery,
    handler: new ListProductsHandler(repo) // Instance
    }
    ]);
  • Registers a repository in the container with a specific token.

    Parameters

    • container: AwilixContainer

      The Awilix DI container

    • token: string

      The registration token (e.g., 'productRepository')

    • repository: any

      The repository instance, class, or factory

    • options: { singleton?: boolean } = {}

      Registration options

    Returns void

    // Register instance
    ContainerHelpers.registerRepository(
    container,
    'productRepository',
    new InMemoryProductRepository()
    );

    // Register class (with auto-wiring)
    ContainerHelpers.registerRepository(
    container,
    'userRepository',
    PostgresUserRepository
    );

    // Register factory
    ContainerHelpers.registerRepository(
    container,
    'orderRepository',
    () => new InMemoryOrderRepository(),
    { singleton: false }
    );
  • Registers multiple repositories at once.

    Parameters

    • container: AwilixContainer

      The Awilix DI container

    • repositories: Record<string, any>

      Map of token to repository (instance, class, or factory)

    • options: { singleton?: boolean } = {}

      Default registration options

    Returns void

    ContainerHelpers.registerRepositories(container, {
    productRepository: new InMemoryProductRepository(),
    userRepository: PostgresUserRepository, // Class
    orderRepository: () => new InMemoryOrderRepository() // Factory
    });