Skip to main content

Class: ObjectContainer

@ima/core.ObjectContainer

The Object Container is an enhanced dependency injector with support for aliases and constants, and allowing to reference classes in the application namespace by specifying their fully qualified names.

Constructors

constructor

new ObjectContainer(namespace)

Initializes the object container.

Parameters

NameTypeDescription
namespaceNamespaceThe namespace container, used to access classes and values using their fully qualified names.

Defined in

packages/core/src/ObjectContainer.ts:135

Properties

_bindingPlugin

Private Optional _bindingPlugin: string

The current plugin binding to OC.

The () method may be called for changing object container binding state only by the bootstrap script.

Defined in

packages/core/src/ObjectContainer.ts:62


_bindingState

Private Optional _bindingState: string

The current binding state.

The () method may be called for changing object container binding state only by the bootstrap script.

Defined in

packages/core/src/ObjectContainer.ts:55


_entries

Private _entries: Map<EntryName, Entry>

Defined in

packages/core/src/ObjectContainer.ts:63


_namespace

Private _namespace: Namespace

The namespace container, used to access classes and values using their fully qualified names.

Defined in

packages/core/src/ObjectContainer.ts:68

Accessors

APP_BINDING_STATE

Static get APP_BINDING_STATE(): string

Returns constant for app binding state.

When the object container is in app binding state, it is possible to register new aliases using the () method and register new constant using the () method, or override the default class dependencies of any already-configured class using the () method (classes that were not configured yet may be configured using the () method or () method).

Returns

string

The app binding state.

Defined in

packages/core/src/ObjectContainer.ts:125


IMA_BINDING_STATE

Static get IMA_BINDING_STATE(): string

Returns constant for IMA binding state.

When the object container is in ima binding state, it is possible to register new aliases using the () method and register new constant using the () method, or override the default class dependencies of any already-configured class using the () method (classes that were not configured yet may be configured using the () method or () method).

Returns

string

The IMA binding state.

Defined in

packages/core/src/ObjectContainer.ts:108


PLUGIN_BINDING_STATE

Static get PLUGIN_BINDING_STATE(): string

Returns constant for plugin binding state.

When the object container is in plugin binding state, it is impossible to register new aliases using the () method and register new constant using the () method, or override the default class dependencies of any already-configured class using the () method (classes that were not configured yet may be configured using the () method or () method).

This prevents the unprivileged code (e.g. 3rd party plugins) from overriding the default dependency configuration provided by ima, or overriding the configuration of a 3rd party plugin by another 3rd party plugin.

The application itself has always access to the unlocked object container.

Returns

string

The plugin binding state.

Defined in

packages/core/src/ObjectContainer.ts:91

Methods

_createEntry

_createEntry(classConstructor, dependencies?, options?): Entry

Creates a new entry for the provided class or factory function, the provided dependencies and entry options.

Parameters

NameTypeDescription
classConstructorUnknownConstructable | UnknownNonConstructable | FactoryFunctionThe class constructor or factory function.
dependencies?DependenciesThe dependencies to pass into the constructor or factory function.
options?EntryOptions

Returns

Entry

Created instance or generated value.

Defined in

packages/core/src/ObjectContainer.ts:637


_createInstanceFromEntry

_createInstanceFromEntry(entry, dependencies?): unknown

Creates a new instance of the class or retrieves the value generated by the factory function represented by the provided entry, passing in the provided dependencies.

The method uses the dependencies specified by the entry if no custom dependencies are provided.

Parameters

NameTypeDefault valueDescription
entryEntryundefinedThe entry representing the class that should have its instance created or factory faction to use to create a value.
dependenciesDependencies[]The dependencies to pass into the constructor or factory function.

Returns

unknown

Created instance or generated value.

Defined in

packages/core/src/ObjectContainer.ts:676


_getDebugName

_getDebugName(name): string

Formats name, function, class constructor to more compact name/message to allow for cleaner debug Error messages.

Parameters

NameType
nameEntryNameWithOptions

Returns

string

Defined in

packages/core/src/ObjectContainer.ts:844


_getEntry

_getEntry(name): null | Entry

Retrieves the entry for the specified constant, alias, class or factory function, interface, or fully qualified namespace path (the method checks these in this order in case of a name clash).

The method retrieves an existing entry even if a qualified namespace path is provided (if the target class or interface has been configured in this object container).

The method throws an Error if no such constant, alias, registry, interface implementation is known to this object container and the provided identifier is not a valid namespace path specifying an existing class, interface or value.

Throws

If no such constant, alias, registry, interface implementation is known to this object container.

Parameters

NameTypeDescription
nameEntryNameWithOptionsName of a constant or alias, factory function, class or interface constructor, or a fully qualified namespace path.

Returns

null | Entry

The retrieved entry.

Defined in

packages/core/src/ObjectContainer.ts:521


_getEntryFromClassConstructor

_getEntryFromClassConstructor(classConstructor): null | Entry

Retrieves the class denoted by the provided class constructor.

The method then checks whether there are defined $dependencies property for class. Then the class is registered to this object container.

The method returns the entry for the class if the specified class does not have defined $dependencies property return null.

Parameters

NameType
classConstructorEntryName

Returns

null | Entry

An entry representing the value at the specified classConstructor. The method returns null if the specified classConstructor does not have defined $dependencies.

Defined in

packages/core/src/ObjectContainer.ts:813


_getEntryFromConstant

_getEntryFromConstant(compositionName): null | Entry

Retrieves the constant value denoted by the provided fully qualified composition name.

The method returns the entry for the constant if the constant is registered with this object container, otherwise return null.

Finally, if the constant composition name does not resolve to value, the method return null.

Parameters

NameType
compositionNameEntryName

Returns

null | Entry

An entry representing the value at the specified composition name in the constants. The method returns null if the specified composition name does not exist in the constants.

Defined in

packages/core/src/ObjectContainer.ts:721


_getEntryFromNamespace

_getEntryFromNamespace(path): undefined | null | Entry

Retrieves the class denoted by the provided fully qualified name within the application namespace.

The method then checks whether there are dependencies configured for the class, no matter whether the class is an implementation class or an "interface" class.

The method returns the entry for the class if the class is registered with this object container, otherwise an unregistered entry is created and returned.

Finally, if the namespace path does not resolve to a class, the method return an unregistered entry resolved to the value denoted by the namespace path.

Alternatively, if a constructor function is passed in instead of a namespace path, the method returns null.

Parameters

NameTypeDescription
pathEntryNameNamespace path pointing to a class or a value in the application namespace, or a constructor function.

Returns

undefined | null | Entry

An entry representing the value or class at the specified path in the namespace. The method returns null if the specified path does not exist in the namespace.

Defined in

packages/core/src/ObjectContainer.ts:775


_isOptional

_isOptional(name): boolean

Checks whether the name is marked as optional.

Parameters

NameTypeDescription
nameEntryNameWithOptionsName of a constant or alias, factory function, class or interface constructor, or a fully qualified namespace path.

Returns

boolean

Defined in

packages/core/src/ObjectContainer.ts:580


_isSpread

_isSpread(name): boolean

Checks whether the name is marked as spread.

Parameters

NameTypeDescription
nameEntryNameWithOptionsName of a constant or alias, factory function, class or interface constructor, or a fully qualified namespace path.

Returns

boolean

Defined in

packages/core/src/ObjectContainer.ts:594


_updateEntryValues

_updateEntryValues(entry, classConstructor, dependencies): void

The method update classConstructor and dependencies for defined entry. The entry throw Error for constants and if you try override dependencies more than once.

Parameters

NameTypeDescription
entryEntryThe entry representing the class that should have its instance created or factory faction to use to create a value.
classConstructorUnknownConstructable | UnknownNonConstructable | FactoryFunctionThe class constructor or factory function.
dependenciesDependenciesThe dependencies to pass into the constructor or factory function.

Returns

void

Defined in

packages/core/src/ObjectContainer.ts:613


bind

bind(name, classConstructor, dependencies?): ObjectContainer

Binds the specified class or factory function and dependencies to the specified alias. Binding a class or factory function to an alias allows the class or function to be specified as a dependency by specifying the alias and creating new instances by referring to the class or function by the alias.

Also note that the same class or function may be bound to several aliases and each may use different dependencies.

The alias will use the default dependencies bound for the class if no dependencies are provided.

Parameters

NameTypeDescription
namestringAlias name.
classConstructorUnknownConstructable | UnknownNonConstructable | FactoryFunctionThe class constructor or a factory function.
dependencies?DependenciesThe dependencies to pass into the constructor or factory function.

Returns

ObjectContainer

This object container.

Defined in

packages/core/src/ObjectContainer.ts:159


clear

clear(): ObjectContainer

Clears all entries from this object container and resets the locking mechanism of this object container.

Returns

ObjectContainer

This object container.

Defined in

packages/core/src/ObjectContainer.ts:473


constant

constant(name, value): ObjectContainer

Defines a new constant registered with this object container. Note that this is the only way of passing string values to constructors because the object container treats strings as class, interface, alias or constant names.

Parameters

NameTypeDescription
namestringThe constant name.
valueunknownThe constant value.

Returns

ObjectContainer

This object container.

Defined in

packages/core/src/ObjectContainer.ts:228


create

create(name, dependencies?): unknown

Creates a new instance of the class or retrieves the value generated by the factory function identified by the provided name, class, interface, or factory function, passing in the provided dependencies.

The method uses the dependencies specified when the class, interface or factory function has been registered with the object container if no custom dependencies are provided.

Parameters

NameTypeDefault valueDescription
nameEntryNameWithOptionsundefinedThe name of the alias, class, interface, or the class, interface or a factory function to use.
dependenciesDependencies[]The dependencies to pass into the constructor or factory function.

Returns

unknown

Created instance or generated value.

Defined in

packages/core/src/ObjectContainer.ts:461


get

get(name): unknown

Retrieves the shared instance or value of the specified constant, alias, class or factory function, interface, or fully qualified namespace path (the method checks these in this order in case of a name clash).

The instance or value is created lazily the first time it is requested.

Parameters

NameTypeDescription
nameEntryNameWithOptionsThe name of the alias, class, interface, or the class, interface or a factory function.

Returns

unknown

The shared instance or value.

Defined in

packages/core/src/ObjectContainer.ts:404


getConstructorOf

getConstructorOf(name): UnknownConstructable | UnknownNonConstructable | FactoryFunction

Returns the class constructor function of the specified class.

Parameters

NameTypeDescription
namestring | UnknownConstructableThe name by which the class is registered with this object container.

Returns

UnknownConstructable | UnknownNonConstructable | FactoryFunction

The constructor function.

Defined in

packages/core/src/ObjectContainer.ts:422


has

has(name): boolean

Returns true if the specified object, class or resource is registered with this object container.

Parameters

NameTypeDescription
nameEntryNameThe resource name.

Returns

boolean

true if the specified object, class or resource is registered with this object container.

Defined in

packages/core/src/ObjectContainer.ts:436


inject

inject(classConstructor, dependencies): ObjectContainer

Configures the object loader with the specified default dependencies for the specified class.

New instances of the class created by this object container will receive the provided dependencies into constructor unless custom dependencies are provided.

Parameters

NameTypeDescription
classConstructorUnknownConstructableThe class constructor.
dependenciesDependenciesThe dependencies to pass into the constructor function.

Returns

ObjectContainer

This object container.

Defined in

packages/core/src/ObjectContainer.ts:269


provide

provide(interfaceConstructor, implementationConstructor, dependencies?): ObjectContainer

Configures the default implementation of the specified interface to use when an implementation provider of the specified interface is requested from this object container.

The implementation constructor will obtain the provided default dependencies or the dependencies provided to the () method.

Parameters

NameTypeDescription
interfaceConstructorUnknownConstructable | UnknownNonConstructableThe constructor of the interface representing the service.
implementationConstructorUnknownConstructableThe constructor of the class implementing the service interface.
dependencies?DependenciesThe dependencies to pass into the constructor function.

Returns

ObjectContainer

This object container.

Defined in

packages/core/src/ObjectContainer.ts:335


setBindingState

setBindingState(bindingState, bindingPluginName?): void

Parameters

NameType
bindingStatestring
bindingPluginName?string

Returns

void

Defined in

packages/core/src/ObjectContainer.ts:481