Flex- und Cairngorm -Fehler: C0001E: Nur eine Servicelocator -Instanz kann instanziiert werden

StackOverflow https://stackoverflow.com/questions/832445

Frage

Ich bin neu bei Flex und Cairngorm. Während ich Servicelocator verwende, stoße ich auf das Problem: Fehler: C0001E: Nur eine Servicelocator -Instanz kann instanziiert werden.

Mein Code ist so:

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 habe ich Snippets:

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

In main.xml mögen Snippets:

<business:Service id="service" />

Diese wundervolle kleine Fehlermeldung taucht in der Minute auf, in der ich eine zweite Instanz eines Moduls lade, für das httpService erforderlich ist.

Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne auf ein anderes Framework zu wechseln?

Schöne Grüße,

Shuo aus China

War es hilfreich?

Lösung

Der Fehler, den Sie sehen, ist die Implementierung des Singleton -Musters durch Cairngorm. Es hindert Sie daran, eine zweite Instanz des Servicelocators zu erstellen, da für das Rahmen nur eine vorhanden ist. Beim Laden der zweiten Instanz Ihres Moduls versucht Ihr Code auch, eine zweite Instanz des Servicelocators zu erstellen, wenn er GetInstance (oder gar keine Instanz erhalten).

Indem Sie Ihr Dienste -Tag in Main.mxml deklarieren, haben Sie Ihre einzige Instanz von Servicelocator erstellt und es kann nirgendwo anders deklariert oder neu deklariert werden. Wenn main.mxml Teil des Moduls ist, das Sie mehr als einmal instanziieren möchten, ist dies Ihr Problem genau dort. Wenn nicht, kann ich nicht sagen, wo in Ihrem Code das Problem auf der obigen begrenzten Stichprobe basiert, aber es sollte sich irgendwo im Modul befinden.

Antwort auf einen Kommentar:

Kein Problem. Sie können Ihr Problem leicht lösen, indem Sie Ihren Dienst in ActionScript anstelle von MXML deklarieren. Indem Sie ein Tag in MXML deklarieren, erstellen Sie immer eine Instanz der entsprechenden als Klasse, während Sie stattdessen die einzige Instanz des Singleton abrufen möchten. Fügen Sie dazu den folgenden als Code in Ihrem Modul MXML hinzu:

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

Dies entspricht im Wesentlichen dem, was Sie mit dem MXML -Tag zu tun versuchen, mit Ausnahme, dass Sie keine neue Serviceinstanz erstellt haben.

Sie müssen den Service jedoch noch irgendwo instanziieren. Setzen Sie dazu den Service MXML -Tag in das HauptmxML der Anwendung, das die Module lädt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top