|
|
|
## Перед началом
|
|
|
|
|
|
|
|
Для лучшего понимания следует ознакомится:
|
|
|
|
- Статья на Habr [Инверсия зависимостей](https://habr.com/ru/post/313796/)
|
|
|
|
- Книги [Ника Ходжеса](https://git-data.ru/Documentation/Guides/-/wikis/Books)
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
Masterpiece, как сервис локатор базируется на **Spring4D**, однако, имеет свои особенности
|
|
|
|
|
|
|
|
Любая программа, которая использует Masterpiece, должна включать в себя **Platform.Core.Application** (Он обеспечивает старт движка Masterpiece)
|
|
|
|
|
|
|
|
Регистрация класса происходит перебором **всех классов**, которые имеют над собой `Service.Attribute`
|
|
|
|
|
|
|
|
**SingletonforLifeTimeManager** (Свой тип Singleton) - Возвращает тот же экземпляр класса, зарегистрированного как Singleton, если он с теми же набором параметров конструктора
|
|
|
|
|
|
|
|
Resolve - сам себя резолвит (выполняются все плюшки, которые резолвятся из сервис локатора)
|
|
|
|
|
|
|
|
**Conteiner** создаётся свой TConteiner, то есть, попытка резолва сервиса из глобального контейнера будет ошибкой - Зарегистрировав сервис через атрибут, требуется обращение к внутреннему контейнеру
|
|
|
|
|
|
|
|
## Что нужно что бы класс можно было получить:
|
|
|
|
|
|
|
|
1. Указать в проекте директиву `{STRONGLINKTYPES ON}`
|
|
|
|
1. Реализация класса должна быть включена в `*.dpr` Кроме тех, что включены в (Platform.Namespaces)
|
|
|
|
|
|
|
|
В процессе инициализации движок делает LoadPacages (Достаточно что бы класс был виден итерации по классам)
|
|
|
|
|
|
|
|
> **Рекомендуется**: При создании сервисов делать конструктор без параметров (т.е. Если классу нужны дополнительные данные - это следует сделать через injection)
|
|
|
|
|
|
|
|
При **финализации**, всем сервисам, даётся **последний шанс** корректно закончить свою работу, после чего выгружаются загруженные пакеты. |
|
|
|
\ No newline at end of file |