Перед началом
Для лучшего понимания следует ознакомится:
- Статья на Habr Инверсия зависимостей
- Книги Ника Ходжеса
Masterpiece, как сервис локатор базируется на Spring4D, однако, имеет свои особенности
Любая программа, которая использует Masterpiece, должна включать в себя Platform.Core.Application (Он обеспечивает старт движка Masterpiece)
Регистрация класса происходит перебором всех классов, которые имеют над собой Service.Attribute
SingletonforLifeTimeManager (Свой тип Singleton) - Возвращает тот же экземпляр класса, зарегистрированного как Singleton, если он с теми же набором параметров конструктора
Resolve - сам себя резолвит (выполняются все плюшки, которые резолвятся из сервис локатора)
Conteiner создаётся свой TConteiner, то есть, попытка резолва сервиса из глобального контейнера будет ошибкой - Зарегистрировав сервис через атрибут, требуется обращение к внутреннему контейнеру
Что нужно что бы класс можно было получить:
- Указать в проекте директиву
{STRONGLINKTYPES ON}
- Реализация класса должна быть включена в
*.dpr
Кроме тех, что включены в (Platform.Namespaces)
В процессе инициализации движок делает LoadPacages (Достаточно что бы класс был виден итерации по классам)
Рекомендуется: При создании сервисов делать конструктор без параметров (т.е. Если классу нужны дополнительные данные - это следует сделать через injection)
При финализации, всем сервисам, даётся последний шанс корректно закончить свою работу, после чего выгружаются загруженные пакеты.