/**
* @module core
*
* Todo: Rewrite the description.
*
* @preferred
* Contains implementation of the inversion of control container, which creates objects
* and controls their lifecycle(*) using various configurations.
*
* Using generic containers, we can create more specialized containers – one of which is the process
* container. It represents a system process, receives its configuration file via the command line,
* and creates a container, starts it, reads its configuration, recreates objects, runs them, and then,
* after pressing ctrl-c, turns off and destroys the objects.
*
* Another example of containers are lambda functions, service fabric containers, and so on.
*
* ### (*) Compont lifecycle: ###
*
* External configurations (stored as YAML or JSON) are passed to the container
* and define the structure of objects that need to be recreated in the container.
* Objects can be defined in two ways:
* - using descriptors (using which registered factories can recreate the object)
* - using hard-coded types (objects are recreated directly, based on their type, bypassing
* factories).
*
* In addition, various configurations are stored for each object. The container recreates the
* objects and, if they implement the IConfigurable interface, passes them their configurations.
*
* Once the objects of a container are configured, if they implement the [[https://pip-services3-node.github.io/pip-services3-commons-node/interfaces/refer.ireferenceable.html IReferencable interface]],
* they are passed a set of references for recreating links between objects in the container. If
* objects implement the [[https://pip-services3-node.github.io/pip-services3-commons-node/interfaces/run.iopenable.html IOpenable interface]],
* the open() method is called and they
* start to work. Connections to various services are made, after which the objects start, the
* container starts running, and the objects carry out their tasks. When the container
* starts to close, the objects that implement the [[https://pip-services3-node.github.io/pip-services3-commons-node/interfaces/run.iclosable.html ICloseable interface]]
* are closed via their
* close() method (which should make them stop working and disconnect from other services),
* after which objects that implement the [[https://pip-services3-node.github.io/pip-services3-commons-node/interfaces/refer.iunreferenceable.html IUnreferencable interface]] delete various links between
* objects, and, finally, the contains destroys all objects and turns off.
*/
export * from './build';
export * from './config';
export * from './refer';
export { Container } from './Container';
export { ProcessContainer } from './ProcessContainer';