我一直在查找 symfony 是如何进行依赖注入的。但我不明白它的直接目的。
它似乎将一切都称为服务。服务是类似于配置的路由器的东西。这些服务中的大多数都有启动所需的设置变量的基线。但是有一种方法叫做“isShared”。
我假设在使用该方法时,它会创建一个新对象,而不是已经创建的对象。
但是当要创建的对象需要一个完全不同的变量时会发生什么?
class foobarClass
{
public function __construct($config.foo)
{
//
}
}
$container = new sfContainerBuilder(array('config.foo' => 'bar'));
$container->register('foobar','foobarClass')
->addArgument('%config.foo%')
->isShared(false);
什么是 config.foo 不应该是 bar 而是 foo?我是否需要为基本上所有可能的配置创建另一个定义(看起来很奇怪并且违背了 DIC 的目的)?
另外,依赖注入和反向控制之间的主要区别是什么?什么时候什么地方习惯什么?
提前致谢!
编辑:
关于参数问题的另一个例子:
class Files
{
protected $_path;
public function __construct($path)
{
$this->_path = $path;
}
}
$container = new sfContainerBuilder(array('path.to.something' => '/some/path/file.abc'));
$container->register('files','files')
->addArgument('path.to.something')
->isShared(false);
如果需要,我应该如何提供新路径?定义已经有了 path.to.something。但是如果我需要一个带有 path.sto.somethingElse 的对象怎么办?