Nefunguje inject uvnitř injectnuté třídy

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

Zdravím,
používám poslední verzi verzi: Nette Framework 2.1-dev a tento commit c18230f zrušil možnost použití inject metod uvnitř injektnuté třídy

V Presenteru inject() funguje jak má, ale když použiji inject v továrně na vytváření formulářů dostanu chybu

Argument 1 passed to Kappa\App\Forms\Comments\CommentsForm::injectCommentsFormSubmitted() must be an instance of Kappa\App\Forms\Comments\CommentsFormSubmitted, none given, called in D:\projekt\temp\cache\_Nette.Configurator\_-2e8e5b952a96855b6fa542a5ce5ce701.php on line 920 and defined

Konfigurace továrničky:

factories:
	CommentsForm:
		create: Kappa\App\Forms\Comments\CommentsForm(%url%)
		implement: Kappa\App\Forms\Comments\ICommentsFormFactory
		parameters: [url]

Třída CommentsForm:

class CommentsForm extends Kappa\Application\UI\Form
{
	/**
	 * @var CommentsFormSubmitted
	 */
	private $commentsFormSubmitted;

	/**
	 * @param CommentsFormSubmitted $commentsFormSubmitted
	 */
	public function injectCommentsFormSubmitted(CommentsFormSubmitted $commentsFormSubmitted)
	{
		$this->commentsFormSubmitted = $commentsFormSubmitted;
	}
	//...
}

Cache:

final class Kappa_App_Forms_Comments_ICommentsFormFactoryImpl_CommentsForm implements Kappa\App\Forms\Comments\ICommentsFormFactory
{

	private $container;


	public function __construct(Nette\DI\Container $container)
	{
		$this->container = $container;
	}


	public function create($url)
	{
		$service = new Kappa\App\Forms\Comments\CommentsForm($url);
		$service->injectCommentsFormSubmitted();
		return $service;
	}

}

Editoval Budry (28. 2. 2013 17:02)

sifik
Člen | 27
+
0
-

Mám bohužel stejný problém.

Lámu si hlavu nad tím, zda to je úmyslně nebo bug?

Možná za tím byla snaha omezit používání inject metod v továrničkách.
V tom případě jsem ale proti, protože rád vytvářím např. v control form, který chci taktéž injectnout. Použít v tomto případě konstruktor mi připadá minimálně divné.

Ono celkově jakékoliv závislosti předávat konstruktorem přes továrničky není zrovna dvakrát pohodlné, díky obšírné konfiguraci v neonu. např.:

factories:
  postControl:
    create: \Flame\Blog\PostBundle\Components\Posts\PostControl(%post%)
    implement: \Flame\Blog\PostBundle\Components\Posts\IPostControlFactory
    parameters: [\Flame\Blog\PostBundle\Entity\Posts\Post post = null]
Filip Procházka
Moderator | 4668
+
0
-
Budry
Člen | 88
+
0
-

Díky :)

Filip Procházka
Moderator | 4668
+
0
-

Davídek nám právě mergl opravu :)