[Frage] Service Class Dependency Injection innerhalb Repository [Gelöst] TYPO3-Version: 9.5.11

  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    08. 01. 2020, 15:02

    Servus,

    wie kann ich bestenfalls meine Service-Objekte innerhalb meines Repositorys "injecten" ?

    In meiner Erweiterung unter Classes/Services verwende ich diverse Service-Klassen.
    Für jede Service-Klasse wird unter Classes/Services/ContainerService jeweils ein Objekt instanziert. Dies passiert innerhalb einer getXyService()-Funktion mittels GeneralUtility::makeInstance('VendorName\\MyExtension\\Service\\MyClassService').

    In meinem Repository möchte ich dann auf das ContainerService-Objekt durch Dependency Injection zugreifen, damit diese nur einmalig instanziert und genutzt werden kann.
    Folgenden Ansatz habe ich bisher versucht:

    In ContainerService:

    class ContainerService {

    private $myService;

    /**
    * @return MyService
    */
    public function getMyService() {

    if ($this->myService === null) {
    $this->myService = GeneralUtility::makeInstance('VendorName\\MyExt\\Service\\myService');
    }

    return $this->myService;
    }
    ...

    In der RepositoryClass:

    use VendorName\MyExt\Service\ContainerService

    class myRepository extends Repository
    {

    /**
    * @TYPO3\CMS\Extbase\Annotation\Inject
    * @var ContainerService
    */
    public $containerService;

    /**
    * ContainerService
    *
    * @param ContainerService $containerService
    */
    public function injectContainerService(ContainerService $containerService): void
    {
    $this->containerService = $containerService;
    }
    ...

    In der RepositoryClass greife ich dann auf ein ServiceObjekt zu, um diverse Methoden dieses Service zu nutzen, welche mir dann im Endeffekt Daten in Form von JSON (oder sonstiges) liefern.

    Diese sollen dann im entsprechenden Controller abgerufen und verarbeitet werden.

    Folgende Fehlermeldung erhalte ich:

    Class ContainerService does not exist. Reflection failed.

    Flush Cashe & Dump Autoload haben leider nicht weitergeholfen.

  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    09. 01. 2020, 17:01 - Lösung

    Fehler gefunden:
    Es lag am Type hinting und den Annotations.
    statt ContainerService den kompletten Namespace verwenden \VendorName\MyExt\Service\ContainerService


  • 1
  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    09. 01. 2020, 17:01

    Fehler gefunden:
    Es lag am Type hinting und den Annotations.
    statt ContainerService den kompletten Namespace verwenden \VendorName\MyExt\Service\ContainerService

  • 1