Am Programmeingang wird das System zusammengesetzt
Konfiguration, Protokollierung und Dienste von der eigentlichen Arbeit trennen.
Ein Programmeinstieg sollte erkennen lassen, aus welchen Teilen der Dienst besteht. Der Host verwaltet die Laufzeit, während registrierte Dienste ihre jeweilige Aufgabe übernehmen. Dependency Injection bedeutet dabei: Ein Objekt erhält benötigte Abhängigkeiten, statt sie überall selbst zu bauen. Das macht ihre gemeinsame oder getrennte Lebensdauer sichtbar. Ein Singleton existiert im Container gewöhnlich einmal; daraus folgt noch nicht, dass sein veränderlicher Zustand bei parallelem Zugriff sicher ist. Die Zusammensetzung benennt Besitz und Lebensdauer, sie ersetzt keine Synchronisationsentscheidung.
Ein Beispiel
Im Beispiel erhält ein Listener einen Logger und eine Konfiguration im Konstruktor. Zwei Listener teilen denselben Logger. Eine Liste offener Verbindungen gehört dagegen zum jeweiligen Listener. Beim Lesen der Registrierung wird sichtbar, welche Objekte geteilt werden und welche nicht.