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');
    });
});
Implementers

Constructors

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

Properties

config ContainerConfig?
getter/setter pair
factories DefaultContainerFactory
getter/setter pair
hashCode int
The hash code for this object.
no setterinherited
info ↔ ContextInfo?
getter/setter pair
logger ↔ ILogger
getter/setter pair
references ContainerReferences?
getter/setter pair
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

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.
configure(ConfigParams config) → void
Configures component by passing configuration parameters.
isOpen() bool
Checks if the component is opened.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
open(String? correlationId) Future
Opens the component.
readConfigFromFile(String? correlationId, String path, ConfigParams parameters) Future
Reads container configuration from JSON or YAML file and parameterizes it with given values.
setReferences(IReferences references) → void
Sets references to dependent components.
toString() String
A string representation of this object.
inherited
unsetReferences() → void
Unsets (clears) previously set references to dependent components.

Operators

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