The main application container.

Hierarchy

Constructors

Properties

applicationUnits: typeof Unit[] = []

The Unit classes registered with the app.

baseDir: string

The fully-qualified path to the base directory of the app.

basePath: UniversalPath

Resolved universal path to the base directory of the app.

blueprintSubscribers: Collection<Unsubscribe> = ...

Collection of subscriptions to ContainerBlueprint events. We keep this around so we can remove the subscriptions when the container is destroyed.

factories: Collection<AbstractFactory<unknown>> = ...

Collection of factories registered with this container.

forceStartupMessage: boolean = true

If true, the "Starting Extollo..." messages will always be logged.

instances: Collection<InstanceRef> = ...

Collection of singleton instances produced by this container.

instantiatedUnits: Unit[] = []

Instances of the units registered with this app.

staticOverrides: Collection<{
    base: StaticInstantiable<any>;
    override: StaticInstantiable<any>;
}> = ...

Collection of static-class overrides registered with this container.

waitingLifecycleCallbacks: Collection<WeakRef<AwareOfContainerLifecycle>> = ...

Collection of created objects that should have lifecycle events called on them, if they still exist.

waitingResolveCallbacks: Collection<{
    callback: ((t: unknown) => unknown);
    key: any;
}> = ...

Collection of callbacks waiting for a dependency key to be resolved.

NODE_MODULES_INJECTION: "extollo/npm" = 'extollo/npm'
makeHistory?: Collection<any>

The 100 most recent dependency keys that were make'd. Used to help with debugging cyclic dependency errors.

makeStack?: Collection<any>

List of dependency keys currently being make'd as a reverse stack. This is used to detect dependency cycles.

realizingContainer: boolean = false

Set to true when we're realizing a container. Used to prevent infinite recursion when getContainer() is accidentally called from somewhere within the realizeContainer() call.

Accessors

  • get errorHandler(): ((e: Error) => void)
  • Get an instance of the RunLevelErrorHandler.

    Returns ((e: Error) => void)

      • (e: Error): void
      • Get an instance of the RunLevelErrorHandler.

        Parameters

        • e: Error

        Returns void

Methods

  • Protected

    Initialize the environment variable library and read from the .env file.

    Returns void

  • Protected

    Check the makeStack for duplicates and throw an error if a dependency cycle is detected. This is used to prevent infinite mutual recursion when cyclic dependencies occur.

    Returns void

  • Get a value from the loaded environment variables. If no value could be found, the default value will be returned.

    Parameters

    • key: string
    • Optional defaultValue: unknown

    Returns any

  • Returns true if the container has an already-produced value for the given key.

    Parameters

    • key: any

    Returns boolean

  • Returns true if the container has a factory for the given key.

    Parameters

    • key: any

    Returns boolean

  • Returns true if the given unit class is registered with the application.

    Parameters

    • unitClass: typeof Unit

    Returns boolean

  • Create an instance of the given target. The target can either be a DependencyKey registered with this container (in which case, the singleton value will be returned), or an instantiable class.

    If the instantiable class has the Injectable decorator, its injectable parameters will be automatically injected into the instance.

    Type Parameters

    • T

    Parameters

    • target: any
    • Rest ...parameters: any[]

    Returns T

  • Create a new instance of the dependency key using this container, ignoring any pre-existing instances in this container.

    Type Parameters

    • T

    Parameters

    • key: any
    • Rest ...parameters: any[]

    Returns T

  • Get a Promise that resolves the first time the given dependency key is resolved by the application. If it has already been resolved, the Promise will resolve immediately.

    Type Parameters

    • T

    Parameters

    • key: any

    Returns Promise<T>

  • Register the given function as a factory within the container.

    Parameters

    • name: any

      unique name to identify the factory in the container

    • producer: (() => any)

      factory to produce a value

        • (): any
        • Returns any

    Returns Application

  • Register a value as a singleton in the container. It will not be instantiated, but can be injected by its unique name.

    Type Parameters

    • T

    Parameters

    • key: any

      unique name to identify the singleton in the container

    • value: T

    Returns Application

  • Resolve the dependency key. If a singleton value for that key already exists in this container, return that value. Otherwise, use the factory and given parameters to produce and return the value.

    Parameters

    • key: any
    • Rest ...parameters: any[]

    Returns any

  • Run the application by starting all units in order, then stopping them in reverse order.

    Returns Promise<void>

  • Set up the bare essentials to get the application up and running.

    Parameters

    • absolutePathToApplicationRoot: string
    • applicationUnits: typeof Unit[]

    Returns void