- [Определения](/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).