预置启动控制器对象前的要求.它叫DI容器吗?


Predefining requirements before starting a controller object. Is it called DI container?

我已经使用注册表模式很长时间了。基本上,我使用main对象加载所有类(即使控制器本身不需要它们),并且控制器可以访问它们。

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

我想为我的控制器定义依赖关系。例如,我的注册控制器只依赖于数据库类,验证码类和过滤器类。

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

//dependencies 
$registerDependencies = array(new Database(), new Recatpcha(), new Filter());
//load register controller
$this->loadController->('register', $this->loadDependencies($registerDependencies));

是叫DI/DI Container吗?这个方法比我现在的系统更好吗?

我可能会使用这种方法:

$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();
}

如果你给你的服务一个别名,你可以有多个服务共享相同的类,但有不同的参数。服务数据库。main'可以连接到数据库和'database '。

Symfony2使用依赖注入,你可以在他们的网站上找到有关该组件的文档。