DI: Multiple services of type

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

Ahoj, potřeboval bych nějak rozlišit jednotlivé objekty v config.neon v případě, že od sebe dědí.
Stále dostávám chybu:
Service ‚28_App_FrontModule_Forms_IItemForm‘: Multiple services of type Front\Model\Storage\AddStorage found: 22_Admin_Model_Storage_AddStorage, 35_Front_Model_Storage_AddStorage
Přikládám části kódu:

<?php
namespace Front\Model\Storage;
class AddStorage { /* v konstruktoru jsou závislosti */ }
?>
<?php
namespace Admin\Model\Storage;
class AddStorage extends \Front\Model\Storage\AddStorage {  }
?>

config.neon
- Admin\Model\Storage\AddStorage
- Front\Model\Storage\AddStorage

V každém presenteru poté použiji:
@var \Admin\Model\Storage\AddStorage @inject
nebo
@var \Front\Model\Storage\AddStorage @inject

Třída AddStorage je pro mě důležitá, protože tuto závislost potřebuje moje třída, která se stará o formuláře:

<?php
namespace App\FrontModule\Forms;

use Nette\Application\UI\Control;
use Nette\Application\UI\Form;

class ItemForm extends Control {
	public $onSuccess;
	private $storage;

	public function __construct(\Front\Model\Storage\AddStorage $storage) {
		$this->storage = $storage;
	}

interface IItemForm {
	/** @return ItemForm */
	public function create();
}

?>

Děkuji všem za případné rady, zaboha nevím jak to vyřešit.

enumag
Člen | 2118
+
+2
-

Jednoduše, ty třídy nesmí dědit jedna od druhé. Místo toho budou mít společného (abstraktního) předka který bude obsahovat to co mají společné.

Facedown
Člen | 38
+
0
-

enumag napsal(a):

Jednoduše, ty třídy nesmí dědit jedna od druhé. Místo toho budou mít společného (abstraktního) předka který bude obsahovat to co mají společné.

Super, funguje to! Tohle by mě opravdu nenapadlo udělat. Nesčetněkrát ti děkuju! :)