[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Колупаем DI Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
twin
Цитата (chee @ 23.01.2021 - 06:35)
Какой сервис я установил некорректно, почему контейнер не помогает себя конфигурировать?

Добавил. Угу, так лучше будет.

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

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

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

user posted image
chee
Цитата
self::$typePropertyes

должно быть
Цитата
self::$typeProperties


и не только тут, у тебя везде это
Цитата
    public function typePropertyes(...$services)


Почему в анонимные функции не передается контейнер как параметр? Мне нужно сейчас вручную настроить зависимость как в Pimple, при том объекты для настройки хочу взять из контейнера. Пришлось использовать use ($container)

$container->setMaps([
'response' => [
Laminas\Diactoros\Response::class,
],
]);


$container->get('response')->z = 1;
var_dump($container->get('response')->z); // Почему тут 1?
die;

Я ожидал новый объект. При том я не просто так его ожидаю, логично что зависимость которая описана как локальная и через get должна возвращать новый объект, почему она себя ведет как сервис?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Ну что же завел свою систему под твой контейнер, не без боли конечно, у тебя все эксепшены тупо не работают, методы имеют не очевидное поведение (смотри сообщение выше), а объявление классов без зависимостей требует также описание сущности в контейнере.

Вот код инициализации твоего контейнера для моей CMS https://pastebin.com/8DqbnD3A
Вот код инициализации моего контейнера для моей CMS https://pastebin.com/a7n1m9gp

Система запустилась на том и другом контейнере без доработок под определенный контейнер.
Немного метрики по производительности, на самой сложной странице для рендеринга:

Мой контейнер

Самый лучший показатель:
Цитата
Execute time: 0.0017340183258057
Memory usage: 0.95968627929688
Include files: 169


Средний показатель:
Цитата
Execute time: 0.0040490627288818
Memory usage: 0.95968627929688
Include files: 169


Твой контейнер:

Самый лучший показатель:
Цитата
Execute time: 0.0055620670318604
Memory usage: 1.2266235351562
Include files: 176


Средний показатель:
Цитата
Execute time: 0.010966062545776
Memory usage: 1.2266235351562
Include files: 176


Подитожу, какая то "поделка", которая "все делает неправильно" но то же самое, трахнула твой контейнер в одинаковом сценарии использования по всем фронтам, от удобства до производительности, при этом умудряется работать из коробки.

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

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 23.01.2021 - 11:00)
Почему в анонимные функции не передается контейнер как параметр? Мне нужно сейчас вручную настроить зависимость как в Pimple, при том объекты для настройки хочу взять из контейнера.
Не совсем понял, для чего это. Есть же наследование.
http://abc-framework.ru/docs/service/conta...ampleMapExtends

Но на всякий случай сделал.
    $map = [

'String' => function (){return 'Строка';},
'MyClass' => [
MyClass::class,
'string' => function () {
return $this->get('String');
},
]
];


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

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

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

user posted image
twin
Цитата (chee @ 23.01.2021 - 12:07)
у тебя все эксепшены тупо не работают
Это я давно починил, забыл написать)))


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

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

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

user posted image
chee
Цитата (twin @ 23.01.2021 - 16:15)
Не совсем понял, для чего это.

У тебя все перед глазами, сам поймешь что и зачем https://pastebin.com/8DqbnD3A

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 23.01.2021 - 11:00)
Я ожидал новый объект. При том я не просто так его ожидаю, логично что зависимость которая описана как локальная и через get должна возвращать новый объект, почему она себя ведет как сервис?

Нет, не так. По аналогии с пимплом, get() всегда возвращает один и тот же объект. Если нужен новый, то нужно юзать getNew()
http://abc-framework.ru/docs/service/container#cetOblect

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

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

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

user posted image
twin
Цитата (chee @ 23.01.2021 - 12:27)
У тебя все перед глазами, сам поймешь что и зачем https://pastebin.com/8DqbnD3A

Вот это не нужно:
$container->typePropertyes([
'bootstrap',
'application',
'response',
'metadata',
'factory',
'middlewareFactory',
'sessionFactory',
'rendererFactory',
'moduleFactory',
'componentFactory',
'responderFactory',
'routerFactory',
ExampleCMS\Config\Local::class,
ExampleCMS\Metadata\Handler\ApplicationModule::class,
ExampleCMS\Metadata\Handler\Application::class,
ExampleCMS\Metadata\Handler\Module::class,
ExampleCMS\Metadata\Handler\Cache::class,
ExampleCMS\Application\Middleware\Session::class,
ExampleCMS\Session\File::class,
ExampleCMS\Application\Middleware\PresetLanguageBySession::class,
ExampleCMS\Cache\Adapter\File::class,
ExampleCMS\Application\Middleware\PresetRendererBySession::class,
ExampleCMS\Renderer::class,
ExampleCMS\Application\Middleware\Web\OopsHandler::class,
ExampleCMS\Module::class,
ExampleCMS\Cache\Adapter\Adapter::class,
ExampleCMS\Application\Responder\Layout::class,
ExampleCMS\Application\Responder\ViewException::class,
ExampleCMS\Application\Responder\ViewFooter::class,
ExampleCMS\Application\Responder\View::class,
ExampleCMS\Application\Middleware\Router::class,
ExampleCMS\Router::class,
ExampleCMS\Application\Middleware\PresetModule::class,
ExampleCMS\Application\Middleware\PresetResponder::class,
ExampleCMS\Application\Middleware\Web\FrontController::class,
ExampleCMS\Module\Installer\Query\Find::class,
ExampleCMS\Application\Responder\ViewForm::class,
ExampleCMS\Application\Responder\Grid::class,
ExampleCMS\Application\Responder\Row::class,
ExampleCMS\Application\Responder\Column::class,
ExampleCMS\Application\Responder\FieldLabel::class,
ExampleCMS\Module\Installer\Responder\FieldTextFromFilesystem::class,
ExampleCMS\Application\Responder\FieldBoolean::class,
ExampleCMS\Module\Installer\Query\Save::class,
ExampleCMS\Application\Responder\FieldEnum::class,
ExampleCMS\Application\Responder\ViewGrid::class,
ExampleCMS\Application\Responder\FieldInput::class,
ExampleCMS\Module\Installer\Middleware\LicenseAcceptChecker::class,
]);

Достаточно сделать так:
$container->typePropertyes(true);


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

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

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

user posted image
Быстрый ответ:

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