Container class

Inversion of control (IoC) container that creates components and manages their lifecycle.

The container is driven by configuration, that usually stored in JSON or YAML file. The configuration contains a list of components identified by type or locator, followed by component configuration.

On container start it performs the following actions:

  • Creates components using their types or calls registered factories to create components using their locators
  • Configures components that implement IConfigurable interface and passes them their configuration parameters
  • Sets references to components that implement IReferenceable interface and passes them references of all components in the container
  • Opens components that implement IOpenable interface

On container stop actions are performed in reversed order:

The component configuration can be parameterized by dynamic values. That allows specialized containers to inject parameters from command line or from environment variables.

The container automatically creates a ContextInfo component that carries detail information about the container and makes it available for other components.

See IConfigurable (in the PipServices 'Commons' package) See IReferenceable (in the PipServices 'Commons' package) See IOpenable (in the PipServices 'Commons' package)

Configuration parameters

  • name: the context (container or process) name
  • description: human-readable description of the context
  • properties: entire section of additional descriptive properties - ...

Example

======= config.yml ========
- descriptor: mygroup:mycomponent1:default:default:1.0
  param1: 123
  param2: ABC

- type: mycomponent2,mypackage
  param1: 321
  param2: XYZ
============================

var container = new Container();
container.addFactory(new MyComponentFactory());

var parameters = ConfigParams.fromValue(process.env);
container.readConfigFromFile('123', './config/config.yml', parameters);

container.open('123', (err) => {
    console.log('Container is opened');
    ...
    container.close('123', (err) => {
        console.log('Container is closed');
    });
});
Implemented types
Implementers

Constructors

Container([String name, String description])
Creates a new instance of the container. [...]

Properties

config ContainerConfig
read / write
factories DefaultContainerFactory
read / write
hashCode int
The hash code for this object. [...]
read-only, inherited
info ContextInfo
read / write
logger ILogger
read / write
references ContainerReferences
read / write
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited

Methods

addFactory(IFactory factory) → void
Adds a factory to the container. The factory is used to create components added to the container by their locators (descriptors). [...]
close(String correlationId) Future
Closes component and frees used resources. [...]
override
configure(ConfigParams config) → void
Configures component by passing configuration parameters. [...]
override
isOpen() bool
Checks if the component is opened. [...]
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
open(String correlationId) Future
Opens the component. [...]
override
readConfigFromFile(String correlationId, String path, ConfigParams parameters) → void
Reads container configuration from JSON or YAML file and parameterizes it with given values. [...]
setReferences(IReferences references) → void
Sets references to dependent components. [...]
override
toString() String
Returns a string representation of this object.
inherited
unsetReferences() → void
Unsets (clears) previously set references to dependent components.
override

Operators

operator ==(Object other) bool
The equality operator. [...]
inherited