Flex 및 Cairngorm 오류:C0001E:하나의 ServiceLocator 인스턴스만 인스턴스화할 수 있습니다.

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

문제

저는 Flex와 Cairngorm을 처음 사용합니다. ServiceLocator를 사용하는 동안 다음과 같은 문제가 발생합니다.오류:C0001E:하나의 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가 필요한 일부 모듈의 두 번째 인스턴스를 로드하는 순간 나타납니다.

다른 프레임워크로 전환하지 않고 이 문제를 해결할 수 있는 방법이 있습니까?

최고의 소원,

중국에서 온 Shuo

도움이 되었습니까?

해결책

보고 있는 오류는 Cairngorm의 Singleton 패턴 구현에서 발생합니다.프레임워크에서는 하나만 필요하므로 ServiceLocator의 두 번째 인스턴스를 생성할 수 없습니다.모듈의 두 번째 인스턴스를 로드할 때 코드는 getInstance()를 사용해야 할 때(또는 인스턴스를 전혀 가져오지 않아야 할 때) ServiceLocator의 두 번째 인스턴스를 생성하려고 시도합니다.

Main.mxml에서 서비스 태그를 선언하면 ServiceLocator의 단독 인스턴스가 생성되며 다른 곳에서는 선언하거나 새로 추가할 수 없습니다.Main.mxml이 두 번 이상 인스턴스화하려는 모듈의 일부인 경우 바로 거기에 문제가 있습니다.그렇지 않은 경우 위의 제한된 샘플을 기반으로 문제가 코드의 어디에 있는지 알 수 없지만 모듈 어딘가에 있을 것입니다.

댓글에 대한 답변:

괜찮아요.MXML 대신 ActionScript에서 서비스를 선언하면 문제를 쉽게 해결할 수 있습니다.MXML에서 태그를 선언하면 항상 해당 AS 클래스의 인스턴스가 생성되는 반면, 대신 싱글톤의 단일 인스턴스를 검색하려고 합니다.이렇게 하려면 모듈 MXML 내부에 다음 AS 코드를 포함하십시오.

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

이는 새 서비스 인스턴스를 생성하지 않는다는 점을 제외하면 MXML 태그를 사용하여 수행하려는 작업과 기본적으로 동일합니다.

그러나 여전히 어딘가에서 서비스를 인스턴스화해야 합니다.그렇게 하려면 모듈을 로드하는 애플리케이션의 기본 MXML 내부에 서비스 MXML 태그를 넣으세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top