0

http://www.devahead.com/blog/2010/03/beware-of-singleton-in-flex-modules/で「Flex モジュールの singleton に注意する」を調べ たところ、多くの情報から別のモジュールであることがわかりました内容は異なりますが、私の場合はうまくいきません!異なるモジュールが同じ静的オブジェクトを使用するのはなぜですか? モジュール全体のシングルトンを使用しようとしていますが、アプリケーション全体のシングルトンのように機能します。モジュール全体のシングルトンを作成する方法を教えてください。短いコードは次のようになります。

    <s:Application>
    <s:ModuleLoader id="A" creationComplete="loadAModule()"/>    
    <s:ModuleLoader id="B" creationComplete="loadBModule()"/>    

    </s:Application>

    //-----------AModule
    <s:Module>
       var aITx:ITx=Tx.newInstant();//Tx extend ITX
       tracc(aITx.instantId);
       ...
    </s:Module>

    //-----------BModule
    <s:Module>
       var aITx:ITx=Tx.getInstance();//Tx extend ITX
       tracc(aITx.instanceID);
       ...
    </s:Module>


    //-----singleton class
        public class Tx extends EventDispatcher  implements ITx
        {
            public function Tx()
            {
                // Add listeners
                addEventListeners();
            } 
            private static var instance:Tx;
            public static function getInstance():Tx
            {
                if (!instance)
                {
                    instance = new Tx();
                    // Generate a random instance ID
                    instance._instanceID = Math.round(Math.random() * 100);
                    trace("create new itx id="+instance.instanceID);
                }else{
                    trace("use old itx id="+instance.instanceID);
                }

                return instance;
            }
            protected var _instanceID: Number = NaN;

            public function get instanceID(): Number
            {
                return _instanceID;
            }

        }
4

1 に答える 1

0

あなたの問題は、モジュールがロードされているコンテキストに関連していると思います。あなたの場合、すべてのモジュールが同じコンテキストにロードされていると思います。1 つのコンテキストには、1 つのクラスの 1 つのバージョンしかありません。したがって、Singleton のインスタンスは 1 つだけです。個別のクラスが必要な場合は、各モジュールを独自のコンテキストにロードする必要があります。コンテキストについて説明しているこのリンクをご覧ください: http://livedocs.adobe.com/flex/3/html/help.html?content=05_Display_Programming_33.html

于 2012-07-30T09:56:22.203 に答える