Hierarchia kontenerów

Na podstawie obiektowego modelu konfiguracyjnego tworzona jest hierachia kontenerów IoC. Rysunek przedstawia przykładową hierarchię kontenerów wraz adapterami, utworzoną na podstawie obiektowego modelu konfiguracji. Model komponent posiadający dwie zależności. Definicje zależności (obiekty depADef i depBDef), są agregowane przez obiekt definiujący komponent typu Component.


Rysunek: Obiektowy model konfiguracji oraz utworzona z niego hierarchia kontenerów z adapterami

Dla każdej definicji komponentu tworzony jest obiekt CoreComponentAdapter, który rejestrowany jest w kontenerze IoC. Drzewiasta struktura definicji jest odwzorowywana w strukturze kontenerów IoC. Wszystkie definicje z pierwszego poziomu konfiguracji wpinane są do głównego kontenera (root) poprzez skojarzone adaptery. Jeśli dana definicja zawiera definicje wewnętrzne (jak w przypadku compDef), to jej adapter tworzy nowy kontener IoC. Nowo utworzony kontener jest przypisany do kontenera, w którym zarejestrowany jest adapter (na rysunku kontener child jest przypisany do kontenera root). W kontenerze tym rejestrowane są wszystkie wewnętrzne definicje w analogiczny sposób (a zatem możliwe jest też tworzenie następnych poziomów w hierarchii kontenerów). Adapter przechowuje wskazanie na ,,własny'' kontener, co pozwala mu na pobieranie zależności podczas tworzenia komponentów. Jeśli definicja nie zawiera żadnych definicji wewnętrznych, skojarzony z nią adapter nie tworzy pustego kontenera IoC, natomiast przechowuje wskazanie na kontener, w którym sam jest zarejestrowany. Sytuacja taka ma miejsce w przypadku obiektów depAAdapter oraz depBAdapter.

W momencie tworzenia instancji komponentu Component, adapter compAdapter w celu pobrania zależności, odwołuje się do "własnego" kontenera. Takie rozwiązanie umożliwia nie tylko przesłanianie implementacji, ale możliwe jest też rejestrowanie w kilku kontenerach IoC różnych implementacji tego samego interfejsu. A wtedy pobranie implementacji zależności będzie zależało od kontenera, do którego kierowane jest żądanie. Ponadto hierarchia kontenerów wprowadza hermetyzację implementacji. - kontenerze widoczne są tylko implementacje zarejestrowane w bezpośrednio w nim lub u jego rodzica.

Attachments: