Interfejs IValueProvider
Obiekty klas implementujących interfejs IValueProvider
odpowiedzialne są za dostarczanie wartości z nimi powiązanych. W platformie AgE zaimplementowano dwa rodzaje "dostawców", które pokazano na rysunku:
Rysunek: Implementacje IValueProvider
SimpleTypeValueProvider
, jest odpowiedzialny za dostarczanie wartości prostych, takich jak liczby, napisy czy adresy agentów. Przechowuje on wartość w postaci zmiennej tekstowej (atrybut value
) oraz typ wartości w postaci odpowiedniej klasy. Do konwersji wartości z tekstowej na żądany typ, używa klasy SimpleTypeParser
.
Rysunek: Diagram sekwencji dostarczania referencji
ReferenceProvider
jest odpowiedzialny za dostarczenia referencji do skojarzonego obiektu. Sekwencja pobierania odpowiedniej referencji przedstawiona jest na rysunku. Po wywołaniu metody getValue
, obiekt ReferenceProvider
wysyła żądanie dostarczenia obiektu do IComponentInstanceProvider
, podając przechowywaną nazwę obiektu (pole name
). Domyślna implementacja CoreComponentAdapter
deleguje to żądanie do skojarzonego kontenera IoC, który na podstawie nazwy wyszukuje obiekt CoreComponentAdapter
skojarzony z definicją szukanego komponentu. Znaleziony adapter przekazuje żądanie do definicji, która tworzy instancję opisywanego przez siebie komponentu. Podczas tworzenia tej instancji możliwe są dalsze zagnieżdżone operacje pobierania zależności. Stworzona instancja jest zwracana przez metodę getValue
.
ReferenceProvider
posiada również opcjonalne pole class
, którego wartość zwracana jest przez metodę getValueClass
. Jeśli pole to jest niezdefiniowane, metoda zwraca klasę dostarczanego obiektu. Metoda ta wykorzystywana jest przy dobieraniu odpowiedniego konstruktora podczas wstrzykiwania przez konstruktor.