import { PureContainer } from '@worktif/utils';
import type { TiesInstance } from '../../../lib/runtime-web/types';
/**
 * Factory for creating and configuring PureContainer instances for microservices.
 *
 * Creates PureContainer<string> instances with singleton scope by default and
 * registers all services from the provided Ties classes. This provides a
 * consistent way to build DI containers for microservices.
 *
 * @example
 * ```typescript
 * const factory = new PureContainerFactory();
 * const container = factory.createMicroserviceContainer([PaymentsTies, BillingTies]);
 *
 * // Container now has all services registered by the Ties classes
 * const paymentsService = container.run('PaymentsService');
 * ```
 */
export declare class PureContainerFactory {
    private readonly tiesRegistrar;
    constructor();
    /**
     * Create a PureContainer for a microservice with registered Ties classes.
     *
     * Creates a new PureContainer<string> with singleton scope by default,
     * then registers all services from the provided Ties classes.
     *
     * @param tiesClasses - Array of Ties class constructors to register
     * @returns Configured PureContainer with all services registered
     * @throws DIContainerError if container creation or registration fails
     *
     * @example
     * ```typescript
     * const container = factory.createMicroserviceContainer([
     *   PaymentsTies,
     *   BillingTies,
     *   ConfigTies
     * ]);
     *
     * // Use the container to resolve services
     * const paymentsService = container.run('PaymentsService');
     * const config = container.runConstant('PaymentsConfig');
     * ```
     */
    createMicroserviceContainer(tiesClasses: TiesInstance[]): PureContainer<string>;
    /**
     * Create a PureContainer with custom configuration.
     *
     * Allows creating containers with custom scope settings or other options.
     * Still registers the provided Ties classes.
     *
     * @param tiesClasses - Array of Ties class constructors to register
     * @param options - PureContainer configuration options
     * @returns Configured PureContainer with all services registered
     * @throws DIContainerError if container creation or registration fails
     *
     * @example
     * ```typescript
     * const container = factory.createCustomContainer(
     *   [PaymentsTies],
     *   { defaultScope: 'Transient' }
     * );
     * ```
     */
    createCustomContainer(tiesClasses: TiesInstance[], options?: {
        defaultScope?: 'Singleton' | 'Transient';
    }): PureContainer<string>;
    /**
     * Validate that a container has all required services registered.
     *
     * Convenience method that delegates to TiesRegistrar.validateContainer().
     * Useful for ensuring container integrity after creation.
     *
     * @param container - PureContainer to validate
     * @param requiredServices - Array of service names that must be registered
     * @throws Error if any required service is not registered
     *
     * @example
     * ```typescript
     * const container = factory.createMicroserviceContainer([PaymentsTies]);
     * factory.validateContainer(container, ['PaymentsService', 'PaymentsConfig']);
     * ```
     */
    validateContainer(container: PureContainer<string>, requiredServices: string[]): void;
    /**
     * Create a container and validate it has all expected services.
     *
     * Combines container creation with validation in a single step.
     * Automatically extracts expected service names from Ties classes if possible.
     *
     * @param tiesClasses - Array of Ties class constructors to register
     * @param additionalServices - Additional service names to validate (optional)
     * @returns Validated PureContainer with all services registered
     * @throws DIContainerError if container creation fails
     * @throws Error if validation fails
     *
     * @example
     * ```typescript
     * const container = factory.createValidatedContainer([PaymentsTies]);
     * // Container is guaranteed to have all services registered by PaymentsTies
     * ```
     */
    createValidatedContainer(tiesClasses: TiesInstance[], additionalServices?: string[]): PureContainer<string>;
}
