Domanda

Sono nuovo di Flex e Cairngorm. Mentre utilizzo ServiceLocator, riscontro il problema: Errore: C0001E: è possibile istanziare solo un'istanza di ServiceLocator.

Il mio codice è così:

In 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"/>

In Delegate.as ho frammenti:

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

In Main.xml, frammenti come:

<business:Service id="service" />

questo meraviglioso piccolo messaggio di errore si apre nel momento in cui carico una seconda istanza di alcuni moduli che richiede httpservice.

Esiste un modo per risolvere questo problema senza passare a un altro Framework?

I migliori auguri,

Shuo dalla Cina

È stato utile?

Soluzione

L'errore che stai vedendo proviene dall'implementazione del modello Singleton da parte di Cairngorm. Ti impedisce di creare una seconda istanza di ServiceLocator perché il framework richiede che ce ne sia solo una. Quando si carica la seconda istanza del modulo, il codice tenta anche di creare una seconda istanza di ServiceLocator quando dovrebbe utilizzare getInstance () (o non ottenere affatto un'istanza).

Dichiarando il tuo tag Servizi in Main.mxml, hai creato la tua istanza solitaria di ServiceLocator e non può essere dichiarata o rinnovata da nessun'altra parte. Se Main.mxml fa parte del modulo che stai cercando di creare un'istanza più di una volta, questo è il tuo problema proprio lì. In caso contrario, non posso dire dove nel tuo codice il problema si basa sull'esempio limitato sopra, ma dovrebbe trovarsi da qualche parte nel modulo.

In risposta al commento:

Nessun problema. Puoi risolvere facilmente il tuo problema dichiarando il tuo servizio in ActionScript anziché MXML. Dichiarando un tag in MXML, crei sempre un'istanza della corrispondente classe AS, mentre invece desideri recuperare l'istanza solitaria del singleton. Per fare ciò, includi il seguente codice AS all'interno del tuo modulo MXML:

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

Ciò è sostanzialmente equivalente a quello che stai cercando di fare con il tag MXML, ad eccezione della non creazione di una nuova istanza del servizio.

Tuttavia, è ancora necessario creare un'istanza del Servizio da qualche parte. Per fare ciò, inserisci il tag Service MXML all'interno del MXML principale dell'applicazione che sta caricando i moduli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top