Flex 및 Cairngorm 오류:C0001E:하나의 ServiceLocator 인스턴스만 인스턴스화할 수 있습니다.
-
07-07-2019 - |
문제
저는 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 태그를 넣으세요.