如何在Flex中创建相同单例的不同模块中获取不同的单例?

时间:2012-07-28 03:53:27

标签: flex

我学过「谨防Flex模块中的单身人士」 在http://www.devahead.com/blog/2010/03/beware-of-singleton-in-flex-modules/ 并且很多信息告诉我不同​​的模块具有不同的内容,但在我的情况下它不起作用! 为什么不同的模块使用相同的静态对象? 我尝试使用模块范围的单例,但它的工作方式类似于应用程序范围的单例。 有人可以帮助我如何制作模块宽单身。 短代码就像:

    <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;
            }

        }

1 个答案:

答案 0 :(得分:0)

我认为您的问题与加载模块的上下文有关。在您的情况下,我猜您的所有模块都加载到相同的上下文中。在一个上下文中,只有一个类的一个版本。因此,您的Singleton只有一个实例。如果要使用单独的类,则必须将每个模块加载到其自己的上下文中。看看这个链接,它解释了上下文非常好的内容:http://livedocs.adobe.com/flex/3/html/help.html?content=05_Display_Programming_33.html