Builder for creating Stratix applications.

Provides a fluent API for configuring and building applications.

const app = await ApplicationBuilder.create()
.useContainer(container)
.useLogger(logger)
.usePlugin(new PostgresPlugin())
.usePlugin(new RabbitMQPlugin())
.useContext(new OrdersContext())
.useContext(new ProductsContext())
.build();

await app.start();

Accessors

Methods

  • Sets the dependency injection container.

    Parameters

    • container: AwilixContainer

      The Awilix container to use

    Returns this

    This builder for chaining

    import { createContainer } from '@stratix/runtime';
    const container = createContainer();
    builder.useContainer(container);
  • Sets the logger.

    Parameters

    • logger: Logger

      The logger to use

    Returns this

    This builder for chaining

    builder.useLogger(new ConsoleLogger());
    
  • Sets the configuration provider.

    The configuration provider will be registered in the DI container and available to all plugins and contexts.

    Parameters

    • config: ConfigProvider

      The configuration provider to use

    Returns this

    This builder for chaining

    import { EnvConfigProvider } from '@stratix/config/env';

    builder.useConfig(new EnvConfigProvider({
    prefix: 'APP_',
    autoTransform: true,
    }));
    import { CompositeConfigProvider } from '@stratix/config/composite';
    import { EnvConfigProvider } from '@stratix/config/env';
    import { FileConfigProvider } from '@stratix/config/file';

    builder.useConfig(new CompositeConfigProvider({
    providers: [
    new EnvConfigProvider({ prefix: 'APP_' }),
    new FileConfigProvider({ files: ['./config.json'] }),
    ],
    strategy: 'first-wins',
    }));
  • Registers a plugin.

    Parameters

    • plugin: Plugin

      The plugin to register

    • Optionalconfig: unknown

      Optional configuration for the plugin

    Returns this

    This builder for chaining

    builder.usePlugin(new DatabasePlugin(), {
    host: 'localhost',
    port: 5432
    });
  • Registers multiple plugins.

    Parameters

    • plugins: Plugin[]

      The plugins to register

    Returns this

    This builder for chaining

    builder.usePlugins([
    new LoggerPlugin(),
    new DatabasePlugin(),
    new ApiPlugin()
    ]);
  • Registers a context.

    Contexts are domain/business logic units that encapsulate a complete domain (domain layer, application layer, infrastructure).

    Parameters

    • context: Context

      The context to register

    • Optionalconfig: unknown

      Optional configuration for the context

    Returns this

    This builder for chaining

    builder.useContext(new OrdersContext());
    builder.useContext(new ProductsContext());
  • Registers multiple contexts.

    Parameters

    • contexts: Context[]

      The contexts to register

    Returns this

    This builder for chaining

    builder.useContexts([
    new OrdersContext(),
    new ProductsContext(),
    new InventoryContext()
    ]);
  • Sets configuration for a plugin.

    Parameters

    • pluginName: string

      The plugin name

    • config: unknown

      The configuration

    Returns this

    This builder for chaining

    builder.configurePlugin('database', {
    host: 'localhost',
    port: 5432
    });
  • Builds and initializes the application.

    Initializes all plugins in dependency order.

    Returns Promise<Application>

    The initialized application

    If container or logger is not set

    If a plugin fails to initialize

    const app = await builder.build();