[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Колупаем DI Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
twin
Цитата (chee @ 28.01.2021 - 18:21)
То есть ты понимаешь, что в класс A, ты не сможешь с помощью своего контейнера внедрить
экземпляр класса B, через ленивую загрузку?
Неа, не понимаю. И контейнер мой не понимает, почему это вдруг...

Ты не смотрел код наверное. Там сборка сервиса происходит на выдаче. После того, как пройден уровень прокси. Поэтому внутри контейнера прокси нет, и можно устанавливать любые типы и интефейсы. Вот наружу он выдаст прокси, и если этот объект, готовый сервис, передать ниже в систему, то да, там интефейс не привяжешь. Потому и хочу сделать выборочно, что бы выбирать из двух зол.

Вообще он на всякий случай реализует интерфейс сервис-локатора. О котором ты дал ссылку. Локатор у меня сделан только для чтения, что бы не было соблазна запулить что-нибудь в контейнер в прогоне. И еще ограничить доступ к другим объектам. Допустим это интересно в командной шине.

Вообще я не дописал еще тесты, но кое что сделал. Отдебажил контейнер, причесал, накрасил губки, осталось усагу написать и можно ставить знак качества. biggrin.gif biggrin.gif biggrin.gif

В тестах кстати есть про интерфейсы.

А ты говоришь... По крайней мере в нем дырок нет по умолчанию, как в твоем.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 29.01.2021 - 05:50)
А ты говоришь... По крайней мере в нем дырок нет по умолчанию, как в твоем.

Какие дырки?

Цитата (twin @ 29.01.2021 - 05:50)
Вообще я не дописал еще тесты, но кое что сделал.

Раздели настройку контейнере и проверку результата, сейчас тесты сложно читать.

        $container = $this->getContainer();

$container->add('ServiceViaConstruct', ViaConstruct::class)
->
addDependences('ServiceViaConstruct', [
'service' => Service::class,
'std' => \StdClass::class
]);

$container->add('ServiceViaMethods', ViaMethods::class)
->
addDependences('ServiceViaMethods', ['viaConstruct' => 'ServiceViaConstruct']);

$container->add('Service', Service::class)
->
addDependences('Service', [
'viaConstruct' => 'ServiceViaConstruct',
'viaMethods' => 'ServiceViaMethods',
]);


$container->add('ServiceViaProperties', ViaProperties::class)
->
addDependences('ServiceViaProperties', ['service' => 'Service']);

$viaProperties = $container->get('ServiceViaProperties');

Вот тут с названиями сущностей в контейнере беда, не надо давать им названия в соответствии с тем что ты от них ожидаешь. Учитывая что ты свалил конфигурирование контейнере и проверку результата, то это становится вообще непонятным где тут у тебя синтаксис контейнера, а где описание его сущностей. Ну и лепту конечно свой вносит, убогое форматирование

https://yadi.sk/i/HMss6FnXOKueQA это оно так выглядит на гитхаб.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.