Nestatická továrnička v CompilerExtension

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pan Dobrman
Člen | 45
+
0
-

Dobrý den, lze použít nestatickou továrničku při tvorbě neon rozšíření? Instanci třídy už mám jako službu vytvořenou, jen potřebuji zavolat její metodu, abych ji předal do jiné služby.

Staticky volám takto:

$builder->addDefinition($this->prefix('service'))
	->setFactory('Class::factory');
Filip Procházka
Moderator | 4668
+
0
-

Předně, to :: je jenom takový „obecný zápis“ (abys nemusel přemýšlet, jestli psát ->, nebo ::). Asi to mate, ale není tím vždy myšleno jen volání statické metody.

$builder->addDefinition($this->prefix('serviceFactory'))
    ->setClass('MyClass');
$builder->addDefinition($this->prefix('service'))
    ->setFactory($this->prefix('@serviceFactory') . '::factory');
Pan Dobrman
Člen | 45
+
0
-

Díky

Editoval Pan Dobrman (31. 12. 2012 18:20)

Pan Dobrman
Člen | 45
+
0
-

Ještě by mě zajímalo, jak by se dal vytvořit takovýto kód.

services:
    myClass:
        class: MyClass
        setup:
            - setSomething(@self::doSomething(foo))

Děkuji předem.

Filip Procházka
Moderator | 4668
+
0
-

Cca takto

$builder->addDefinition($this->prefix('myClass'))
	->setClass('MyClass')
	->addSetup('setSomething', array(
		new Nette\DI\Statement('@self::doSomething', array('foo'))
	));