AgE 2.5 : PicoContainer

PicoContainer - struktura i zasada działania

Głównym elementem frameworku PicoContainer jest kontener IoC. Domyślna implementacja kontenera - DefaultPicoContainer - zawiera rejestr komponentów, które mogą być utworzone za jego pomocą. Kontener umożliwia rejestrację komponentu za pomocą tekstowego klucza, który staje się wtedy jego identyfikatorem w kontenerze, lub z wykorzystaniem jego typu 1. Komponenty zarejestrowane w taki sposób mogą być pobierane na trzy sposoby: z wykorzystaniem klucza, za pomocą typu nadrzędnego, który posłużył do rejestracji komponentu lub za pomocą typu samego komponentu.

Wszystkie żądania dostarczenia instancji komponentu kierowane są bezpośrednio do kontenera IoC, jednak odpowiedzialność utworzenia instancji komponentu jest delegowana do tzw. adaptera komponentu. Adapter - obiekt typu ComponentAdapter - definiuje "sposób" produkcji komponentu i jest tworzony dla każdego komponentu podczas jego rejestracji w kontenerze IoC.

Schemat działania mechanizmu dostarczania instancji komponentu przedstawiony jest na powyższym rysunku. Rolą kontenera IoC jest odnalezienie w swoim rejestrze odpowiedniego obiektu ComponentAdapter, skojarzonego z żądanym komponentem, oraz delegowanie operacji dostarczenia instancji komponentu do znalezionego adaptera. Domyślna implementacja adaptera (InstanceComponentAdapter) przy każdym żądaniu instancjonuje w pełni zainicjalizowany obiekt reprezentujący komponent. Oznacza to, że adapter jest również odpowiedzialny za wstrzyknięcie wszystkich zależności tworzonego komponentu. Do pobierania zależności korzysta z kontenera IoC, który dostarczany jest do niego jako parametr metody getComponentInstance. Rozstrzyganie zależności odbywa się analogicznie do pobierania instancji komponentu, z tym tylko wyjątkiem, że "klientem" kontenera jest adapter.

Framework dostarcza ponadto adapter CachingComponentAdapter, który tworzy nową instancję komponentu tylko przy pierwszym żądaniu, natomiast przy każdym następnym dostarczą wcześniej stworzony obiekt. Pozwala on na realizację zasięgu singleton w obrębie jednego kontenera.

Rozwiązanie oparta na adapterach komponentów pozwala na proste dostosowanie sposobu tworzenia komponentów do potrzeb platformy AgE. W tym celu należy dostarczyć nową implementację interfejsu ComponentAdapter.


1 Zakłada się, że komponenty są rejestrowane za pomocą typów nadrzędnych -- interfejsów, które realizują.

Attachments: