Używam koncepcji DI od jakiegoś czasu, ale teraz zaczynam używać kontenera wtrysku zależności (DIC). Chociaż jedno nie jest dla mnie jasne.Jak zachować instancję kontenera Injection Injection (PHP)?
W moim DIC przechowuję (na przykład) obiekt Config i obiekt Request. Rozumiem, że te obiekty w zakresie żądania (ta sama instancja jest używana za każdym razem, gdy żądasz jej z tego kontenera) pozostają takie same. Ale dzieje się tak tylko wtedy, gdy ponownie wykorzystam to samo wystąpienie DIC.
Jak powinienem przekazać DIC wokół moich zajęć? Powiedz, że chcę go użyć w mojej klasie Router, czy muszę go przekazać w konstruktorze mojej klasy Routera? Ale klasa Router jest tworzona w innej klasie i ta powinna już mieć ten obiekt DIC.
Czy powinienem utworzyć singleton tego DIC?
Najlepszym sposobem jest utworzenie DIC w bootstrapie mojej aplikacji i przekazanie go w razie potrzeby? Wydaje się, że to dobre podejście, ale muszę włożyć w to dodatkowy wysiłek. (Moje klasy będą również bardzo testowalne) – jayv
Dla kontenera, który jest używany przez całą aplikację, co może być całkiem dobrym pomysłem. Skutecznie hermetyzuje zasoby/obiekty, które w innym wypadku musiałyby zostać wyeksponowane jako zmienne globalne lub Singletony. Pamiętaj, że możesz także mieć "lokalne" kontenery DI o ograniczonym zakresie użytkowania. Te powinny być tworzone w sposób, w którym są wymagane. – Mchl
Czy możesz podać mi krótki praktyczny przykład użycia ograniczonego zakresu? – jayv