FlexおよびCairngormエラー:C0001E:インスタンス化できるServiceLocatorインスタンスは1つだけです
-
07-07-2019 - |
質問
私はFlexとCairngormが初めてです。ServiceLocatorを使用していますが、問題が発生します:エラー:C0001E:インスタンス化できるServiceLocatorインスタンスは1つだけです。
私のコードは次のようなものです:
Servies.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を必要とするモジュールの2番目のインスタンスを読み込むとすぐにポップアップします。
別のフレームワークに切り替えずにこの問題を解決する方法はありますか?
最高の願い、
中国のS
解決
表示されているエラーは、ケアンゴームのシングルトンパターンの実装に起因しています。フレームワークでは1つだけ存在する必要があるため、ServiceLocatorの2番目のインスタンスを作成できません。モジュールの2番目のインスタンスをロードするとき、コードはgetInstance()を使用する必要がある(またはインスタンスをまったく取得しない)ときに、ServiceLocatorの2番目のインスタンスも作成しようとしています。
Main.mxmlでServicesタグを宣言することにより、ServiceLocatorの単一のインスタンスを作成し、他の場所で宣言または更新することはできません。 Main.mxmlが2回以上インスタンス化しようとしているモジュールの一部である場合、それが問題です。そうでない場合、コードのどこで問題が上記の限定サンプルに基づいているのかわかりませんが、モジュール内のどこかにあるはずです。
コメントへの返信:
問題ありません。 MXMLではなくActionScriptでサービスを宣言することにより、問題を簡単に解決できます。 MXMLでタグを宣言すると、対応するASクラスのインスタンスが常に作成されますが、代わりにシングルトンの孤立したインスタンスを取得することになります。これを行うには、モジュールMXML内に次のASコードを含めます。
var service:Service = Service(ServiceLocator.getInstance());
これは、新しいServiceインスタンスを作成しないことを除いて、MXMLタグで実行しようとしていることと本質的に同等です。
ただし、サービスをどこかでインスタンス化する必要があります。そのためには、モジュールをロードしているアプリケーションのメインMXML内にService MXMLタグを配置します。