模块的域

模块的域

默认的,一个模块会被加载进当前程序域(主程序)的一个子域。因此它自己的类定义只会在自己的域中。

问题:
“SchoolModule”中定义了一个“School”类来使用, 然后新加载的“StudentModule”中也使用“School”类(Main中没有用School类)。
Adobe FlashPlayer将抛出一个异常(School@5454不能转换成School)
原因是: “School”只存在于子域,而程序试图将“StudentModule”域中的 “School” 转换成 “SchoolModule” 域中的 “School”。

解决:

  • 1. 在“主域”先定义(不太好的)

    对于一些类,可以在Application中先使用他们,使其存在于“主域”,这样所有的子域都可以正常使用他们了。
    如:
    //定义一个“木偶变量”
    private var school:School;

  • 2. 使用注射机制(SchoolShape中正在使用的)

    对于一些单例模式(TileFactory), 可以在Module启动时, 把主程序上的 TileFactory.getInstance() 传递到新的Module上, 以保证 Main.tileFactory == Module.tileFactory。
    如:
    保证 Module上的对象和主程序上的是同一个
    moduleInit() {
       newModule.setTileFactory( main.tileFactory );
    }

  • 3. 修改Module.applicationDomain(期待)

    你可以通过ModuleLoader类的applicationDomain定义一个不同的程序域。
    如:
    moduleInit() {
       moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
    }

  • ; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值