Как можно по всему проекту использовать только 1 объект, не используя паттерн синглтон? Или это единственное решение?
Мне нужно решить следующую задачу:
$logger = new Monolog\Logger('someName');
$errHandler = new Monolog\ErrorHandler($logger);
$errHandler->registerErrorHandler();
$errHandler->registerExceptionHandler();
$errHandler->registerFatalHandler();
$logger->pushHandler(new Monolog\StreamHandler('logs.log'));
$logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
$logger->pushProcessor(new Monolog\Processor\MemoryPeakUsageProcessor());
$logger->pushProcessor(new Monolog\Processor\IntrospectionProcessor());
// ... и другие конфигурации логирования
Таким образом создается и сконфигурированный экземпляр класса логирования, который Я планирую использовать для своего проекта.
Как мне сделать, чтобы при использования логирования в разных местах проекта (в разных файлах, классах, ..), не приходилось каждый раз создавать новый экземпляр класса и конфигурировать его - это наверняка не правильно (как минимум это не удобно).
Ранее мне предлагали создание экземпляра класса и его конфигурацию запихнуть в отдельный файл, и подключать где-нибудь в начале проекта. Мне такой вариант не нравится, т.к.объект будет инициализирован в любом случае, не важно, используется оно или нет. Т.е. необходим lazy-load.
Насколько я понимаю, хорошо бы первым делом обернуть конфигурацию и создание объекта логирования в какой-нибудь враппер?
Дальше если решить вопрос lazy-load через DI контейнер, то получится, при использовании (вытаскивании объекта логирования) из DI-контейнера в разных файлах проекта, будет каждый раз создаваться новый объект.. Это мне не мешает. Код будет и дальше работать, создавая новые объекты логирования. Но здравый смысл подсказывает, что это ни есть хорошо. Почему бы не использовать тот объект, который уже создан ?
Вопрос в следующем, как можно добиться такого результата? Уже задавал кучу разных вопросов тут.. Читал много статей про DI-контейнеры. Но никто не смог внятно объяснить.. Как можно добиться такого результата, что для этого нужно сделать.
По сути, всю проблему решит singleton-wrapper (в котором буду создавать объект логирования и конфигурировать его). Как можно тоже самое сделать без синглтона?
И еще, "вопрос в вопросе", когда мы используем DI-контейнер, то получается, что он не 1 для всего проекта? В каждом файле проекта нужно его заного объявлять и задавать сервисы и их зависимости? Есть ли какие-то решение, чтобы можно было в начале проекта описать свои сервисы из сконфигурировать, и использовать так где это необходимо?
Большая просьба помочь, объяснить как это работает. Уже не первую неделю ищу ответы на свои вопросы. Буду благодарен!
Все зависиот от структуры проекта.
Если это классическое спагетти, отдельные похапе файлы на каждую операцию, то синглетон будет самой меньшей из проблем. Используй на здоровье.
Если это классическая "MVC" иерархия с кдиной точкой входа, где объекты создаются на лету ядром, то вот при этом создании и используем объекты из контейнера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему в java Observable является именно классом, а не интерфейсом?
Какие есть способы обработки изображения для выделения графика? То есть из изображения с графиком нужно отделить график от сетки и фона
я делаю регистрацию для приложения, связал с БД, всё вроде нормально, так же использовал готовое решение от ФейсбукаСуть в чём, при регистрации,...