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:
- Closes components that implement IClosable interface
- Unsets references in components that implement IUnreferenceable interface
- Destroys components in the container.
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
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