Ошибка Flex и Cairngorm:С0001Е:Можно создать экземпляр только одного экземпляра ServiceLocator.

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

Вопрос

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

Мой код выглядит следующим образом:

В 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.

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

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

Шуо из Китая

Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top