Введение

Метод ModuleBase.Setup(XafApplication application)

Метод ModuleBase.Setup(ApplicationModulesManager moduleManager)

Событие ModuleBase.SettingUp

Событие ModuleBase.SetupComplete

Варианты использования и примеры

Регистрация domain components

Работа с eXtensions Framework (XF)

Инициализация singleton свойств

Введение

Зачастую при инициализации приложении приходится перекрывать методы Setup() у базовых классов. К таковым относятся методы:

  • Setup(XafApplication application)
  • Setup(ApplicationModulesManager moduleManager)

Также существуют ряд событий, которые сопровождают выполнение выше указанных методов:

  • SetupComplete
  • SettingUp

Метод ModuleBase.Setup(XafApplication application)

Этот метод предназначен для выполнения дополнительной инициализации объекта приложения и вызывается сразу же после добавления объекта модуля в список модулей приложения. Этот метод имеет следующие особенности:

  1. Не учитывается информация о зависимости модуля от других модулей. Это означает, что при запуске приложения последовательность вызова методов Setup для модулей приложения в общем случае не детерминирована, т.е. непостоянна.
  2. Этот метод будет вызван столько раз, сколько объект модуля будет добавлен в приложение.
  3. Этот метод не вызывается при работе дизайнера VS и отдельного редактора модели приложения.

Исходя из вышеописанного, можно сделать вывод, что в методе ModuleBase.Setup(XafApplication application) рекомендуется выполнять только подписку на события приложения или выполнять инициализацию локальных данных для объекта модуля.

Метод ModuleBase.Setup(ApplicationModulesManager moduleManager)

Этот метод предназначен для выполнения дополнительной инициализации объекта ApplicationModulesManager, который отвечает за общий список модулей и управляет объектом модели приложения. Этот метод имеет следующие особенности:

  1. Метод вызывается после того как окончательно сформирован и упорядочен по зависимостям список всех нужных в данный момент модулей.
  2. Этот метод вызывается всегда: при старте приложения, а также при запуске дизайнера модели приложения как в VS, так и внешним редактором.

Событие XafApplication.SettingUp

Это событие возникает перед инициализацией приложения и вызывается в начале выполнения метода XafApplication.Setup().

В момент возникновения события список всех модулей приложения уже сформирован и допускается инициализация различных singleton объектов, которые не зависят от состояния объекта приложения или состояния им агрегированных объектов.

Событие XafApplication.SetupComplete

Это событие возникает после инициализации приложения и вызывается в конце выполнения метода XafApplication.Setup().

В момент возникновения события список всех модулей приложения уже сформирован и допускается инициализация самого объекта приложения или различных singleton объектов, которые зависят от состояния объекта приложения и состояния им агрегированных объектов.

Варианты использования и примеры

Вот некоторые варианты использования, которые требуют правильной инициализации модуля:

  • Регистрация domain components.
  • Работа с eXtensions Framework (XF)
  • Инициализация singleton свойств.

Регистрация domain components

Регистрацию доменных компонентов рекомендуется производить в методе ModuleBase.Setup(ApplicationModulesManager moduleManager)

Пример

Работа с eXtensions Framework (XF)

Регистрация сущностей и их расширений должно производится только в методе ModuleBase.Setup(ApplicationModulesManager moduleManager). Это обусловлено тем, что XF генерирует дополнительные domain components, которые должны быть доступны во редакторе модели, в том числе из VS и ModelEditor.exe

Пример

Инициализация singleton свойств.

Существуют особенности работы web-приложения в режиме Shared Application.

Этот режим работы предполагает, что в момент старта web-приложения создается и инициализируется объект xaf-приложения. При этом пользовательская asp.net сессия еще не существует. Это означает, что выполняются все упоминавшиеся выше методы, но ValueManager находится в неверном (непригодном для работы) состоянии.

Чтобы устранить возникающие ошибки, необходимо обращаться к ValueManager только в том случае, если объект xaf-приложения не является Shared Application. Ниже приведен пример, как это можно делать.

Пример