- [Определения](/docs/v3/ioc#definition) - [Регистрация объекта](/docs/v3/ioc#register) - [Получение объекта](/docs/v3/ioc#resolve) ## Определения IoC контейнер - это простое средство для управления созданием объектов. С его помощью можно определить создание сложных объектов, что позволяет создать их в вашем приложении с помощью одной строки кода. Вы также можете использовать это, чтобы внедрить зависимости в классы и контроллеры. IoC контейнеры помогут сделать ваше приложение более гибким и тестируемым. Так как вы можете установить альтернативные реализации интерфейса с контейнером, вы можете изолировать код, который вы тестируете, от внешних зависимостей с помощью [заглушек и имитаторов] (http://martinfowler.com/articles/mocksArentStubs.html). ## Регистрация объекта #### Регистрация создания объекта в IoC контейнере: IoC::register('mailer', function() { $transport = Swift_MailTransport::newInstance(); return Swift_Mailer::newInstance($transport); }); Отлично!Мы зарегистрировали создание SwiftMailer в контейнере. Но что, если мы не хотим, чтобы контейнер создавал новый экземпляр SwiftMailer каждый раз, когда нам нужно? Может быть, мы просто хотим, чтобы контейнер вернул один и тот же экземпляр создания экземпляра. Просто укажите контейнеру что объект должны быть "одиночкой"(singleton): #### Регистрация синглтона в контейнере: IoC::singleton('mailer', function() { // }); Также вы можете зарегистрировать имеющийся объект контейнера как синглтон. #### Регистрация имеющегося объекта как синглтона в контейнере: IoC::instance('mailer', $instance); ## Создание объектов Когда у вас есть зарегистрированный SwiftMailer в контейнере, вы можете создать его методом **resolve** класса **IoC**: $mailer = IoC::resolve('mailer'); > **Примечание:** Вам нужно также [зарегистрировать контролер в контейнере](/docs/v3/controllers#dependency-injection).