Zpo-13-wyk-Slajd21
Wstrzykiwanie zależności przez konstruktor
Kolejne dwa sposoby rozwiązywania zależności stanowią istotną zmianę w stosunku do poprzedniej metody. Wyszukiwanie zależności nakładało na komponent obowiązek samodzielnego spełnienia swoich zależności, natomiast rola kontenera sprowadzała się do utrzymywania rejestru komponentów i dostarczenia obiektu kontekstu komponentowi implementującemu interfejs Serviceable .
Wstrzykiwanie zależności, bez względu na użytą technikę, zmienia ten stan rzeczy. Komponent, zamiast samodzielnie zdobywać potrzebne zasoby, jedynie deklaruje potrzebę ich wykorzystania w sposób, który jest czytelny dla kontenera i pozwala mu rozwiązać zależności w imieniu tego komponentu. Odpowiedzialność za dostarczenie zależności jest przeniesiona na kontener.
W przypadku wstrzykiwania przez konstruktor deklaracją taką są listy parametrów konstruktorów. Aby utworzyć instancję komponentu, kontener musi dostarczyć obiekty, które mogą posłużyć jako implementacje tych parametrów, i przekazać je do konstruktora tego komponentu. Jeżeli korzystając z zarejestrowanych komponentów nie może tego uczynić, wówczas utworzenie komponentu zależnego także nie jest możliwe i jest zgłaszane w postaci wyjątku. W przypadku gdy komponent posiada wiele konstruktorów, z zasady kontenery próbują utworzyć go korzystając z konstruktora najbardziej specyficznego (tj. o najdłuższej liczbie parametrów), którego zależności mogą rozwiązać.
Najważniejszą cechą tej techniki jest zapewnienie spójnego stanu komponentu w każdym momencie jego istnienia (co jest jednym z warunków tzw. dobrego obywatelstwa ), także bezpośrednio po wywołaniu konstruktora przez komponent. Ceną za uzyskanie tej własności jest brak możliwości zrealizowania zależności cyklicznych, tj. takich, w których komponenty zależą od siebie wzajemnie.