2015-03-04 3 views

ответ

0

Это архитектурный выбор, который был сделан разработчиками. Существуют определенные компоненты структуры, которые требуют ссылки на Application (обычно текущий текущий Application). Кэш, БД, Сообщения (i18n), Evolutions и WS API - первые, которые приходят на ум.

Значок Application является неотъемлемой частью работающего приложения Play. Он предназначен для хранения конфигурации приложения, маршруты, ссылки на плагинов, GlobalSettings объекта, ведение журнала прикладной и т.д.

Например, когда я назвать:

DB.withConnection { implicit c => 
    ... 
} 

мне нужно иметь play.api.Play.current в объеме (текущий текущий Application). Зачем? Он знает, где загружается DBApi, и другие параметры конфигурации базы данных, если они понадобятся.

Аналогично, когда я звоню play.api.cache.Cache.set(...), мне нужен неявный Application, чтобы API-интерфейс кеша мог определить, какие плагины кэша загружены и какой из них использовать.

Почему эти API не просто ссылаются на текущий текущий Application? На самом деле бьется. Это определенно повредило бы модульности, чтобы повсюду иметь жестко закодированную ссылку Application. Я полагаю, вы можете иметь несколько запущенных приложений для тестов и т. Д. Я помню, что читал, что play.api.Play.current может уйти в будущих версиях, чтобы устранить необходимость сохранения глобального состояния, хотя я не могу найти источник.

+0

Это в дорожной карте для 3.0: https://docs.google.com/document/d/11sVi1-REAIDFVHvwBrfRt1uXkBzROHQYgmcZNGJtDnA/pub – Ryan

Смежные вопросы