我一直在查找symfony是如何做到的dependency injection。但我不明白它的直接目的。依賴注入Symfony對象創建參數
它似乎將一切都視爲服務。服務是沿着配置的路由器的線路。這些服務中的大多數都具有啓動所需的設置變量的基線。但有一種叫做'isShared'的方法。
我假設在使用該方法時,它會創建一個新的Object而不是已經創建的Object。
但是當要創建的對象需要一個完全不同的變量時會發生什麼?
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不應該是酒吧,而是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的對象呢?
依賴注入是控制反轉的一種方法。還有很多其他方法可以進行控制反轉。至於你的參數,並不重要,因爲配置通常是從配置文件中讀取的,不會在應用程序執行時發生改變(儘管你的問題令人困惑,因爲你標記了SF2,但你的代碼看起來像SF1)。 – mpm 2013-04-25 21:58:11
我的不好,認爲這是SF2。 – John 2013-04-26 12:12:05