我已经使用注册表模式很长时间了。基本上,我使用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使用依赖注入,你可以在他们的网站上找到有关该组件的文档。