Ошибка Flex и Cairngorm: C0001E: может быть создан только один экземпляр ServiceLocator - PullRequest
0 голосов
/ 07 мая 2009

Я новичок в Flex и Cairngorm. Хотя я использую ServiceLocator, я сталкиваюсь с проблемой: Ошибка: C0001E: Может быть создан только один экземпляр ServiceLocator.

Мой код такой:

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

В Delegate.as у меня есть фрагменты:

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

В файле Main.xml такие фрагменты, как:

<business:Service id="service" />

это замечательное маленькое сообщение об ошибке выскакивает, как только я загружаю второй экземпляр какого-то модуля, который требует httpservice.

Есть ли способ решить эту проблему, не переходя на другую платформу?

С наилучшими пожеланиями,

Шуо из Китая

1 Ответ

2 голосов
/ 07 мая 2009

Ошибка, которую вы видите от реализации Cairngorm шаблона Singleton. Это мешает вам создать второй экземпляр ServiceLocator, потому что фреймворк требует, чтобы был только один. При загрузке второго экземпляра вашего модуля ваш код также пытается создать второй экземпляр ServiceLocator, когда он должен использовать getInstance () (или вообще не получать экземпляр).

Объявив твой тег Services в Main.mxml, ты создал свой единственный экземпляр ServiceLocator, и он не может быть объявлен или обновлен где-либо еще. Если Main.mxml является частью модуля, который вы пытаетесь создать несколько раз, это ваша проблема. Если нет, я не могу сказать, где в вашем коде проблема основана на ограниченном примере выше, но она должна быть где-то в модуле.

В ответ на комментарий:

Нет проблем. Вы можете легко решить свою проблему, объявив свой Сервис в ActionScript вместо MXML. Объявляя тег в MXML, вы всегда создаете экземпляр соответствующего класса AS, тогда как вместо этого вы хотите извлечь единственный экземпляр синглтона. Для этого включите в свой модуль MXML следующий код AS:

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

По сути это эквивалентно тому, что вы пытаетесь сделать с тегом MXML, за исключением того, что не создается новый экземпляр службы.

Однако вам все еще нужно где-то создать экземпляр Службы. Для этого поместите тег Service MXML внутри основного MXML приложения, которое загружает модули.

...