在启动控制器对象之前预定义要求。它被称为DI容器吗?

时间:2013-03-16 16:41:48

标签: php

我一直在使用注册表模式很长一段时间。基本上,我使用主对象加载所有类(即使控制器本身不需要它们),控制器也可以访问它们。

目前它加载了20个类,我想改变我的方法。

我想为我的控制器定义依赖项。例如,我的寄存器控制器只依赖于数据库类,重访类和过滤器类。

所以,我想创建一个这样的解决方案:

//dependencies 
$registerDependencies = array(new Database(), new Recatpcha(), new Filter());

//load register controller
$this->loadController->('register', $this->loadDependencies($registerDependencies));

是否称为DI / DI容器? 这比我现在的系统更好吗?

1 个答案:

答案 0 :(得分:0)

我可能会使用这种方法:

$this->loadController->register('database.main', 'Database')
                     ->register('database.user', 'Database')
                     ->register('recaptcha', 'Racatpcha');

寄存器功能看起来像这样

public function register($serviceName, $serviceClass)
{
    // you can inject options to your class via a config array or a conf file
    $this->registry[$serviceName] = new $serviceClass();
}

如果为服务提供别名,则可以使用多个服务,这些服务共享同一个类但具有不同的参数。 服务'database.main'可以连接到DB,'database.user'可以连接到另一个DB。

Symfony2使用依赖注入,您可以找到documentation about the component on their website