Dependency Injection (DI) — это механизм, который позволяет вашему коду получить доступ к различным сервисам и функциональности программы. Представьте, что у вас есть коробка с инструментами (DI-контейнер), и вы можете просто попросить нужный инструмент по имени, а не собирать его самостоятельно.
Проще говоря:
Такой подход позволяет быстро и в один взгляд понять с какими же именно частями программы взаимодействует скрипт - сразу видно, какие "рычаги" ему требуются.
Это не только упрощает поддержку скриптов, но и позволяет внедрять некоторые техники оптимизации - когда четко понятно, что именно нужно скрипту, остальные части к примеру, можно откинуть.
Использование init
-свойств — простой и безопасный способ получать зависимости. Такие свойства инициализируются один раз при старте скрипта и не могут быть изменены позже.
Пример:
ISendInputScriptingApi SendInput { get; init; } // автоматически будет инициализировано при запуске скрипта
SendInput.MouseMoveTo(200, 100); // передвинет мышь в Х200 Y100
SendInput.MouseRightClick(); // тыкнет правую кнопку мыши
Dependency
Атрибут [Dependency]
позволяет указать EyeAuras, чтобы свойство автоматически инициализировалось при старте. В отличие от init
, такое свойство можно поменять после запуска скрипта.
Пример:
[Dependency] ISendInputScriptingApi SendInput { get; set; }
SendInput.MouseMoveTo(200, 100); // передвинет мышь в Х200 Y100
SendInput.MouseRightClick(); // тыкнет правую кнопку мыши
Когда использовать Dependency
?
GetService
(самый мощный и универсальный способ)Метод GetService
— самый универсальный способ получить сервисы в вашем скрипте. Он позволяет "на лету" запросить нужную зависимость и тут же её использовать.
Пример с управлением мышью:
var sendInput = GetService<ISendInputScriptingApi>();
sendInput.MouseMoveTo(200, 100); // передвинет мышь в Х200 Y100
sendInput.MouseRightClick(); // тыкнет правую кнопку мыши
Пример с проигрыванием звуков:
using PoeShared.Audio.Services; // не забудьте указать пространство имен
var sound = GetService<IPlaySoundScriptingApi>();
sound.PlaySound(AudioNotificationType.Minions); // проиграет звук
Когда использовать GetService
?
init
-свойства для наиболее надёжного и безопасного способа подключения сервисов.[Dependency]
, если хотите иметь возможность менять сервисы в процессе работы.GetService
в ситуациях, когда сервис нужен на короткое время или может динамически изменяться.