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