Skip to content

Инверсия управления запуском приложения

Одной из конечных точкой использования фреймворка для внедрения зависимостей является отказ от какой-либо логики при запуске приложения. В конце концов мы же жёлуди в поделку добавляем не просто так, а чтобы они могли Сообщить("Привет, мир!").

Вместо императивного стиля в виде поиска желудя и вызова у него нужного метода, мы можем добавить в Поделку... ещё один жёлудь с аннотацией &Рогатка.

&Рогатка - это специальный желудь, содержащий метод ПриЗапускеПриложения(), который вызовется при, кхм, запуске приложения. Если еще точнее, при вызове Поделка.ЗапуститьПриложение().

bsl
&Деталька(ЗначениеПоУмолчанию = "Привет, Мир!")
Перем Приветствие;

&Рогатка
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Процедура ПриЗапускеПриложения() Экспорт
    Сообщить(Приветствие);
КонецПроцедуры

&Рогатка является полноценным желудем, поэтому может принимать с свой конструктор и поля &Детальки и &Пластилин, а так же вжухается напильниками после создания.

По умолчанию, все &Рогатки запускаются в фоновом задании (да, в OneScript есть фоновые задания!), затем ОСень начинает ожидать завершения работы каждой &Рогатки и выводить сообщения об ошибке, если вдруг выстрел не удался. Это поведение можно переопределить с помощью параметров аннотации с говорящими названиями ЗапускатьВФоне и ОжидатьЗавершения.

bsl
&Рогатка(ЗапускатьВФоне = Ложь)
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Процедура ПриЗапускеПриложения() Экспорт
    Сообщить("Привет, Мир!");
КонецПроцедуры

Следует аккуратно писать код в &Рогатках, запускаемых не в фоновом режиме, т.к. в этом случае Поделка будет ожидать завершения такой не-фоновой &Рогатки и не запускать остальные &Рогатки. Если же ПриЗапускеПриложения() в такой &Рогатке выбросит исключение, то запуск приложения остановится, а работа приложения завершится.

Как и любой &Желудь, &Рогатка может иметь аннотацию &Порядок. Она будет влиять на порядок запуска рогаток, что особенно важно для рогаток, запускающихся не в фоне.