The C++ UNO Runtime Engine is implemented under the cppuhelper module. During bootstrap, it installs a type manager and a service manager. The service manager is installed as follows:
The Service Manager is initialized by parsing a config file, which the environment variable UNO_SERVICES points to on application startup. Whilst there is a legacy config files in a binary format, the preferred format is a well defined XML file. The services configuration file starts something like this:
The Service Manager needs the following to manage each component:
Loader: specifies what loads the component,
Environment: it is loaded in (e.g. Java, gcc3, etc.)
Module URI: what the service is implemented in.
Service implementations: this provides an implementation name, in a namespace, and can provide an optional contructor function to initialize the service (there must, however, be an environment provided in the component)
an implementation can have a Service, which is defined by a grouping of interfaces
an implementation can further be defined as a Singleton, which defines a global name for a UNO object and determines that there can only be one instance of this object that must be reachable under this name