首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceLocator和C0001E错误: Flex :只能实例化一个Flex实例

ServiceLocator和C0001E错误: Flex :只能实例化一个Flex实例
EN

Stack Overflow用户
提问于 2009-05-07 00:49:15
回答 1查看 2.1K关注 0票数 0

我刚接触Flex我使用的是ServiceLocator,我确实遇到了这样的问题: Error: C0001E:只能实例化一个ServiceLocator实例。

我的代码是这样的:

在Serives.mxml中:

代码语言:javascript
复制
<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中,我有一些代码片段:

代码语言:javascript
复制
this.service = ServiceLocator.getInstance().getHTTPService(”statistServ”);

在Main.xml中,代码片段如下:

代码语言:javascript
复制
<business:Service id="service" />

当我加载需要httpservice的某个模块的第二个实例时,就会弹出这个精彩的小错误消息。

有没有办法在不切换到其他框架的情况下解决这个问题?

谨致问候,

来自中国的Shuo

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-07 02:27:27

您所看到的错误来自于凯恩戈姆对Singleton模式的实现。它阻止您创建ServiceLocator的第二个实例,因为框架要求只有一个实例。当加载模块的第二个实例时,您的代码还会尝试创建ServiceLocator的第二个实例,而此时它应该使用getInstance() (或者根本不获取实例)。

通过在Main.mxml中声明您的服务标记,您已经创建了您的ServiceLocator的唯一实例,并且不能在其他任何地方声明或更新它。如果Main.mxml是您多次尝试实例化的模块的一部分,那么这就是问题所在。如果不是,我不能根据上面有限的示例来判断问题在您的代码中的哪里,但它应该在模块中的某个地方。

回复评论:

没问题。你可以通过用ActionScript而不是MXML来声明你的服务来解决你的问题。通过在MXML中声明标记,您总是在创建相应AS类的实例,而您却希望检索单例的唯一实例。为此,请将以下代码作为代码包含在模块MXML中:

代码语言:javascript
复制
var service:Service = Service(ServiceLocator.getInstance());

除了不创建新的Service实例之外,这基本上等同于您尝试使用MXML标记所做的事情。

但是,您仍然需要在某个位置实例化该服务。为此,将Service MXML标记放在加载模块的应用程序的主MXML中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/832445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档