Как создать глобальные переменные в области видимости, которые являются глобальными только во время одного запроса? - PullRequest
0 голосов
/ 20 января 2019

Когда запрос попадает в мое приложение dancer2, я хочу настроить объект, который будет доступен всем пакетам, участвующим в обработке этого запроса.

Как я могу убедиться, что этот объект имеет область действия только внутри этого человекаrequest и не доступен другим запросам?

В частности, этот объект должен заполняться сообщениями всех видов (ошибки, предупреждения, сообщения отладки и т. д.), когда выполнение проходит через мои библиотеки.

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

Я думал о создании экземпляра этого класса сообщений вмаршрутизатор, а затем передавая ссылку на него во всех методах обработки этого запроса.

Мои интуитивные ощущения говорят мне, что я упускаю что-то принципиально в архитектуре в отношении dancer2, поэтому я решил спросить вас.Кстати, это мой первый пост, поэтому я прошу прощения за недостатки, которые могут возникнуть у моего вопроса.

1 Ответ

0 голосов
/ 20 января 2019

Мне кажется, вы могли бы использовать var для удержания вашего объекта.

См. https://metacpan.org/pod/distribution/Dancer2/lib/Dancer2/Manual.pod#var

Если вам нужно, чтобы он был доступен даже из методов, которые не знают о Dancer, вы можете использовать var, а также сохранить свой объект в глобальной переменной, используя слабую ссылку.

...