Pregunta

Soy nuevo en Flex y Cairngorm. Mientras estoy usando ServiceLocator, me encuentro con el problema: Error: C0001E: Solo se puede crear una instancia de ServiceLocator.

Mi código es así:

En Serives.mxml:

<cairngorm:ServiceLocator xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:cairngorm="com.adobe.cairngorm.business.*">
<mx:HTTPService id="statistServ"
    url="rooms.xml"
    showBusyCursor="true"
    method="POST"
    resultFormat="array"/>

En Delegate.as, tengo fragmentos:

this.service = ServiceLocator.getInstance().getHTTPService(”statistServ”);

En Main.xml, fragmentos como:

<business:Service id="service" />

este maravilloso pequeño mensaje de error aparece en el momento en que cargo una segunda instancia de algún módulo que requiere httpservice.

¿Hay alguna forma de resolver este problema sin cambiar a otro Framework?

Mis mejores deseos,

Shuo de China

¿Fue útil?

Solución

El error que está viendo es de la implementación de Cairngorm del patrón Singleton. Le impide crear una segunda instancia de ServiceLocator porque el marco requiere que solo haya una. Al cargar la segunda instancia de su módulo, su código también está intentando crear una segunda instancia de ServiceLocator cuando debería usar getInstance () (o no obtener una instancia).

Al declarar su etiqueta de Servicios en Main.mxml, ha creado su única instancia de ServiceLocator y no se puede declarar ni renovar en ningún otro lugar. Si Main.mxml es parte del módulo que está intentando instanciar más de una vez, ese es su problema allí mismo. Si no, no puedo decir en qué parte de su código se basa el problema en la muestra limitada anterior, pero debería estar en algún lugar del módulo.

En respuesta al comentario:

No hay problema. Puede resolver fácilmente su problema declarando su Servicio en ActionScript en lugar de MXML. Al declarar una etiqueta en MXML, siempre está creando una instancia de la clase AS correspondiente, mientras que en su lugar desea recuperar la única instancia del singleton. Para hacer esto, incluya el siguiente código AS dentro de su módulo MXML:

var service:Service = Service(ServiceLocator.getInstance());

Eso es esencialmente equivalente a lo que está intentando hacer con la etiqueta MXML, con la excepción de no crear una nueva instancia de Servicio.

Sin embargo, aún necesita crear una instancia del Servicio en alguna parte. Para hacerlo, coloque la etiqueta MXML de servicio dentro del MXML principal de la aplicación que está cargando los módulos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top