Jak funguje inject v Nette 2.1 u service?

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

Mám dvě třídy. Jednu

<?php
abstract class DAO extends Nette\Object{
	/** @var Connection */
	private $database;
	private $dibi;
	private $tableName;
	private $columns = array();
	private $columnsDefaults = array();

	public function __construct($tableName) {
		$this->tableName = $tableName;
		echo "construct  ";
	}

	/**
	* @param \Nette\Database\Connection
	*/
	public function injectConnection(\Nette\Database\Connection $database){
		$this->database = $database;
		echo "inject";
	}
...
?>

A druhou:

<?php
class StatusDAO extends DAO{
	public function __construct() {
		parent::__construct("statuses");
	}
...
?>

V configu mám nastaveno:

services:
statusDAO: StatusDAO

Když v prezenteru pak použiju

<?php
$statusDAO = $this->context->getService("statusDAO");
?>

Tak se mi vypíše na obrazovku jen „construct“. Tedy žádný „inject“ se neprovede.

Dělám to špatně, nebo je chyba v Nette?

studna
Člen | 181
+
0
-

Aby ti to fungovalo, config musíš trošku upravit.

services:
	statusDAO:
		class: statusDAO
		setup:
			- injectConnection
Leinad
Člen | 23
+
0
-

studna napsal(a):

Aby ti to fungovalo, config musíš trošku upravit.

services:
	statusDAO:
		class: statusDAO
		setup:
			- injectConnection

To by ale mělo být potřeba jen u starýho Nette 2.0.x. V Nette 2.1 dev má být nějaký nový autowiring, když se použije Inject.

Leinad
Člen | 23
+
0
-

Ou, tak hloupá chyba. Při práci s více verzemi Nette se mi to pomíchalo a používal jsem Nette 2.0.6 místo 2.1 dev… Takže jsem nahrál novou správnou verzi a už autowiring funguje