控制反转容器(IoC Container)

目录

定义

一个IoC容器是一个简单的管理对象创建的方式. 你可以用它来定义复杂对象的创建, 让你在程序中只用一行代码就实现对他们的处理. 您也可以用它把依赖对象"注入”到你的类和控制器中.

IoC容器有助于使您的应用程序更加灵活和易于测试. 你可以通过容器注册一个接口的实现, 你可以通过注入的外部依赖对象测试你的代码. 通过stubs and mocks实现.

注册对象

在IoC容器中注册解析器:

IoC::register('mailer', function()
{
    $transport = Swift_MailTransport::newInstance();

    return Swift_Mailer::newInstance($transport);
});

太棒了!现在, 我们已经为SwiftMailer注册了一个解析器. 但是, 我们不希望每次当需要的时候都创建一个新的mailer实例. 在一次初始化之后我们只是希望容器返回相同的实例. 你只需要告诉容器你要的对象应该是一个单身就好:

在IoC容器中注册一个单例解析器:

IoC::singleton('mailer', function()
{
    //
});

您也可以注册一个现有的对象实例作为一个在容器中的单例.

注册一个现有的对象实例作为一个在容器中的单例:

IoC::instance('mailer', $instance);

处理对象

现在, 我们如何得到在容器中注册的SwiftMailer实例呢?, 我们可以使用IoC类的resolve方法:

$mailer = IoC::resolve('mailer');

提示: 也许你需要 控制器的依赖注入.