Инверсия управления запуском приложения
Одной из конечных точкой использования фреймворка для внедрения зависимостей является отказ от какой-либо логики при запуске приложения. В конце концов мы же жёлуди в поделку добавляем не просто так, а чтобы они могли Сообщить("Привет, мир!")
.
Вместо императивного стиля в виде поиска желудя и вызова у него нужного метода, мы можем добавить в Поделку
... ещё один жёлудь с аннотацией &Рогатка
.
&Рогатка
- это специальный желудь, содержащий метод ПриЗапускеПриложения()
, который вызовется при, кхм, запуске приложения. Если еще точнее, при вызове Поделка.ЗапуститьПриложение()
.
&Деталька(ЗначениеПоУмолчанию = "Привет, Мир!")
Перем Приветствие;
&Рогатка
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура ПриЗапускеПриложения() Экспорт
Сообщить(Приветствие);
КонецПроцедуры
&Рогатка
является полноценным желудем, поэтому может принимать с свой конструктор и поля &Детальки
и &Пластилин
, а так же вжухается напильниками после создания.
По умолчанию, все &Рогатки
запускаются в фоновом задании (да, в OneScript есть фоновые задания!), затем ОСень начинает ожидать завершения работы каждой &Рогатки
и выводить сообщения об ошибке, если вдруг выстрел не удался. Это поведение можно переопределить с помощью параметров аннотации с говорящими названиями ЗапускатьВФоне
и ОжидатьЗавершения
.
&Рогатка(ЗапускатьВФоне = Ложь)
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура ПриЗапускеПриложения() Экспорт
Сообщить("Привет, Мир!");
КонецПроцедуры
Следует аккуратно писать код в
&Рогатках
, запускаемых не в фоновом режиме, т.к. в этом случаеПоделка
будет ожидать завершения такой не-фоновой&Рогатки
и не запускать остальные&Рогатки
. Если жеПриЗапускеПриложения()
в такой&Рогатке
выбросит исключение, то запуск приложения остановится, а работа приложения завершится.
Как и любой &Желудь
, &Рогатка
может иметь аннотацию &Порядок
. Она будет влиять на порядок запуска рогаток, что особенно важно для рогаток, запускающихся не в фоне.