Arquitectura y petición · Pregunta 9 de 12
Un controlador requiere un GeocoderInterface en su constructor. La extensión contiene dos implementaciones, OpenStreetMapGeocoder y GoogleGeocoder. El contenedor informa de un error. ¿Cómo se define la implementación por defecto?
2 respuestas son correctas. Medio
Mostrar solución
Solución
- A Definir un alias en Services.yaml: Vendor\
MyExt\ Geocoder\ GeocoderInterface: '@Vendor\ MyExt\ Geocoder\ OpenStreetMapGeocoder' - B Añadir el atributo #[AsAlias(GeocoderInterface::class)] a la clase OpenStreetMapGeocoder
Explicación
Si hay exactamente una implementación, Symfony la vincula automáticamente a la interfaz al cargar las clases. Con dos candidatas, el contenedor no sabe cuál usar y se detiene. Un alias responde precisamente a esa pregunta, ya sea con #[AsAlias] (Symfony DependencyInjection) directamente en la clase o en Services.yaml. public: true solo hace que un servicio pueda obtenerse desde fuera, y SingletonInterface solo controla si makeInstance reutiliza una instancia.