Определения
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');
Примечание: Вам нужно также зарегистрировать контролер в контейнере.