(Заранее извиняюсь за этот «своего рода» ответ, но мы работаем над лучшим решением ...)
Вам нужно сделать шаг назад и тщательно продумать свой дизайн.
У вас проблемы, потому что у вас есть идея, что что-то в вашем дизайне должно быть одноэлементным, но либо:
1) это на самом деле не нужно,
2) может уже существовать что-то, что выполняет эту работу за вас (например, HTTP-библиотека, которую вы используете),
или
3) Вы делаете неправильную вещь одиночной, или вы не разбили свой дизайн на соответствующие части, чтобы хорошо работать с единственной идеей
Итак, вы можете сказать мне, почемувы собираетесь на одиночный подход?Это просто для того, чтобы гарантировать, что только один сетевой запрос может произойти одновременно?Есть ли в вашем одноэлементном объекте понятие состояния?Затем я обновлю этот ответ или комментарий и т. Д.
( Отступление: Я также добавил бы, что в некоторых случаях может возникнуть реальная потребность в ' strong 'singleton - под этим я подразумеваю, что на самом деле существует только один возможный экземпляр, и этот механизм встроен прямо в ваш объект, как вы делаете, но это не так. Альтернатива -' слабый 'singleton, под которым я подразумеваю ваш основной объект, который фактически выполняет работу, как обычно, имеет простой метод init
, но общий доступ к общему объекту осуществляется через другой объект, который является своего рода простой «фабрикой», которая создает экземпляры/ содержит общий экземпляр. Преимущество этой слабой единой идеи состоит в том, что ваш код более пригоден для повторного использования в различных контекстах - например, вы можете решить сделать несколько HTTP-запросов / сеансов одновременно в более позднее время - и это иногда делает написание тестов менеепроблематичный).