Контест Senior Laravel: контейнер и очереди обновлено
Свой DI-контейнер с синглтонами
Условие
Реализуйте упрощённый контейнер. Объявления:
class Name Dep1 Dep2 ...: конкретный класс и типы параметров его конструктора (может быть без зависимостей);bind Abstract Concrete: при запросеAbstractсоздаватьConcrete;singleton T: для типаTсоздаётся один экземпляр на всё время работы (если дляTнетbind, создаётся самT).
Каждое созданное новое значение получает глобальный порядковый номер (с 1, в порядке завершения создания: сначала зависимости, потом сам объект). Объект записывается как Class#номер, а если есть зависимости, то Class#номер(dep1,dep2).
Ошибки: ERROR cannot resolve X, если X (после применения bind) не объявлен классом; ERROR circular A -> B -> A, если создание зациклилось (путь из классов от первого запрошенного).
Ввод: n объявлений, затем q запросов типов (по одному на строку).
Пример
5
class Logger
class Mailer Logger
class UserService Mailer Logger
singleton Logger
bind MailerInterface Mailer
4
UserService
UserService
MailerInterface
PaymentGateway
UserService#3(Mailer#2(Logger#1),Logger#1)
UserService#5(Mailer#4(Logger#1),Logger#1)
Mailer#6(Logger#1)
ERROR cannot resolve PaymentGateway
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.