Dependency container

0

Cześć. Spotkałem się ostatnio z ciekawym zadaniem związanym z laravelem oraz container i nie wiem w sumie jakbym się do takiego czegoś mógł zabrać.

Może opiszę pokrótce jaki jest case:

Jest sobie paczka w projekcie laravela, która ma w sobie zahardkodowaną zależność, kontroler tworzy sobie jakiś serwis, zamiast wstrzykiwać go do kontrolera. Ze względu na zmianą logiki biznesowej trzeba podmienić interfejs, który jest w tym serwisie za pomocą "dependency container".

Kawałek z treści tego zadania:

As we cannot touch code from the vendor folder, you must replace one interface using a dependency container. In your implementation, you have to use XRepositoryInterface.

W jaki sposób za pomocą "dependency container" mogę podmienić ten interfejs? Jest to w jakiś logiczny sposób możliwe? Pewnie można to zrobić jakoś za pomocą Container w laravelu? Macie jakieś sugestie, jak to można potencjalnie rozwiązać? Dawno temu miałem styczność z laravelem, a ten przypadek mnie w sumie zaciekawił i chętnie bym poznał rozwiązanie.

Pozdrawiam!

0
App::bind( XRepositoryInterface::class, MyNewRepositoryInterface::class );

od teraz za każdym razem gdy chcesz stworzyc obiekt przez XRepositoryInterface bedzie uzywal twojego interfejsu MyNewRepositoryInterface
Cyba ze juz masz jakies inne repozytorium wiec wtedy zamieniasz to inne na to z X

App::bind( JakiesInneRepositoryInterface::class, XRepositoryInterface::class );

Ogolnie uzywanie repozytoriwo to lipa bo blokujesz sobie mozliwosci eloquenta. ktos to tam wymyslil ale to debilny pomysl. nie uzywaj tego

0

Dzięki za odpowiedź. Jeżeli użyłbym swojego interfejsu to PHP mi w tym wypadku zwróci błąd? Czy wtedy nie muszę aby zaimplementować obydwóch interfejsów w swojej klasie, która będzie bindowana?

0

Nie zworci ci bledu o ile bedziesz mial wszystkie funkcje z interfejsu takie jak orginalne tylko ze swoja implementacja. Chyba ze zapomnisz dodac metody do repo a gdzies ona bedzie wywolywana to ci zwroci blad. To raczej trzeba traktowac jak przpeisanie klasy (motd) pod swoje potrzeby

1 użytkowników online, w tym zalogowanych: 0, gości: 1