如何在Flex的不同模块中创建不同的单例,以创建相同的单例?
问题描述:
我学习过「当心Flex单元中的单件」 http://www.devahead.com/blog/2010/03/beware-of-singleton-in-flex-modules/ 很多资讯都告诉我不同的模块有不同的内容,但在我的情况下却不行! 为什么不同模块使用相同的静态对象? 我想使用模块宽度单例,但它的工作像应用程序范围内的单例。 有人可以帮助我如何使模块单身人士。 短代码是这样的:如何在Flex的不同模块中创建不同的单例,以创建相同的单例?
<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;
}
}
答
我认为你的问题是关系到模块加载的情况下在你的情况我想所有的模块被加载到相同的上下文。在一种情况下,一个类只有一个版本。因此,你的Singleton只有一个实例。如果你想有独立的类,你必须将每个模块加载到它自己的上下文中。看看这个链接,它解释了上下文相当不错:http://livedocs.adobe.com/flex/3/html/help.html?content=05_Display_Programming_33.html
谢谢,我认为你是对的。但我已经放弃使用单例,并重写每一件事情。现在每件事都可以。 – user1559053 2012-08-17 00:36:08