0

FlexとCairngormを初めて使用します。ServiceLocatorを使用しているときに、問題が発生します。エラー:C0001E:インスタンス化できるServiceLocatorインスタンスは1つだけです。

私のコードは次のようなものです:

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を必要とするモジュールの2番目のインスタンスをロードした瞬間にポップアップします。

別のフレームワークに切り替えずにこの問題を解決する方法はありますか?

幸運をお祈りしています、

中国からのシュオ

4

1 に答える 1

2

表示されているエラーは、Cairngorm のシングルトン パターンの実装によるものです。フレームワークでは ServiceLocator の 2 つ目のインスタンスを作成する必要があるため、ServiceLocator の 2 つ目のインスタンスを作成できません。モジュールの 2 番目のインスタンスをロードするとき、コードは getInstance() を使用する必要がある (またはインスタンスをまったく取得しない) ときに、ServiceLocator の 2 番目のインスタンスも作成しようとします。

Main.mxml で Services タグを宣言すると、ServiceLocator の唯一のインスタンスが作成され、他の場所で宣言または新規作成することはできなくなります。Main.mxml が、複数回インスタンス化しようとしているモジュールの一部である場合、それが問題です。そうでない場合、問題が上記の限定されたサンプルに基づいているコードのどこにあるのかわかりませんが、モジュールのどこかにあるはずです。

コメントへの返信:

問題ない。MXML ではなく ActionScript で Service を宣言することで、問題を簡単に解決できます。MXML でタグを宣言することにより、対応する AS クラスのインスタンスを常に作成することになりますが、代わりにシングルトンの唯一のインスタンスを取得する必要があります。これを行うには、モジュール MXML 内に次の AS コードを含めます。

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

これは、新しい Service インスタンスを作成しないことを除いて、MXML タグで行おうとしていることと本質的に同じです。

ただし、どこかで Service をインスタンス化する必要があります。これを行うには、モジュールをロードしているアプリケーションのメイン MXML 内に Service MXML タグを配置します。

于 2009-05-07T02:27:26.790 に答える