Lære 2 med Symfony Container DI

stemmer
2

Jeg jobber med en Zend Framework prosjekt som utnytter Lære 2. Jeg prøver å få Symfony er DI container arbeider med prosjektet også, men jeg har problemer med. Anta at jeg har en klasse Foo som trenger to tilfeller injisert. Jeg kan sette opp en Symfony DI beholder ikke noe problem å hente meg en ny Foo med avhengig injisert. Flott! Men nå hva om jeg ønsker å gjøre Foo en doktrine enhet? Alt er vel når jeg setter inn enheten til DB fordi jeg kan ta en ny en fra DI container og bare vedvare foretaket. Men når jeg spørre enhet fra DB Lære er forekomster mine Foo forekomster og de vil ikke ha de riktige avhengighetene injisert. Hvordan får jeg Lære å bruke min DI container slik at enheten vil ha de nødvendige avhengigheter? Jeg vet at Lære tilbyr en postLoad krok i at jeg kunne bruke til å injisere avhengigheter på min enhet, men den slags nederlagene formålet og nytte av DI container.

Publisert på 14/03/2011 klokken 06:49
kilden bruker
På andre språk...                            


2 svar

stemmer
4

En Lære Entity er en newable, ikke en injeksjon. Enhetene er ikke ment å bli skapt gjennom en DIC. Se dette etter blogginnlegg på forskjellen mellom newable og injiserbare:

http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/

Svarte 14/03/2011 kl. 12:35
kilden bruker

stemmer
0

Det er litt vanskelig, men det kan gjøres. Det finnes en oppdatering for symfony di container som gjør det mulig å passere en allerede eksisterende objekt til beholderen byggmester forekomst og la di beholder konfigurere den for deg (f.eks injisere avhengigheter basert på grensesnitt). Lappen er implementert i dette arkivet på GitHub: https://github.com/lstrojny/symfony men dıdn't gjøre det oppstrøms til symfony mester depotet.

Du bruker det slik:

$user = new User();
$container->configure('someId', $user);

Deretter kan du registrere en PostLoad hendelsesbehandling med Doctrine's EventManager (se her for mer informasjon: http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html ). I dette tilfelle handler konfigurerer du lastet enhet via den nevnte metoden. It'si opplagt, men du kan ikke bruke konstruktøren injeksjon i dette tilfellet bare setter.

Dette er en litt vanskelig å sette opp, men kan være meget kraftig, spesielt i forbindelse med evnen til å symfony di beholderen for å injisere avhengigheter basert på grensesnitt.

Svarte 15/03/2011 kl. 20:46
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more