Hi folks,

I've been battling this problem for a while now and I'm at my wits' end.

I'm trying to implement a plugin system for our application, and having a devil 
of a time getting SWF file which was dynamically loaded itself, load additional 
SWF files.

It goes something like this:

1. Main Application Shell loads...
2. ---------+ Application loads...
3. -----------------+Plugin(s)

We have no problem getting app #1 to load app #2

However, try as I might, I cannot get app #2 to load and instantiate #3

I've tried various permutations using the ModuleManager, but this is the 
closest I get.  When the onLoadComplete method get invoked, I can see that the 
SWF loaded, however the factory always returns NULL.

What is interesting is that when I extract this out in its own application, it 
works fine.  This issue is triggered by the fact that I'm loading Plugin from a 
SWF that was loaded dynamically itself.

I believe this is due to the ApplicationDomain, but I cannot make heads or 
tails of it.  I tried specifying currentDomain, new 
ApplicationDomain(Application.currentDomain) and new ApplicationDomain() 
without success.  

Also, it is important to note that I cannot make reference a hard reference to 
the Foo class in either applications since by their nature, we will not know 
ahead of time what they will contain.

Googlin' around, this seems to be a fairly known problem, but I have not found 
a (clear) solution yet.

Any idea/help ?  Thanks a bunch !
-Phil

assetModule = ModuleManager.getModule("Foo.swf");    
assetModule.addEventListener(ModuleEvent.READY, onLoadComplete );
assetModule.addEventListener(ModuleEvent.ERROR, onLoadError);
assetModule.load();
.
.
.
private function onLoadComplete( event:Event ):void
{
        trace("module loaded");
        
    _pluginInstance = assetModule.factory.create() as Plugin;
    if( _pluginInstance )
        _pluginInstance.startup();
    else 
        Alert.show("unable to instantiate module");
}

private function onLoadError( event:Event ):void
{
           Alert.show("error");
}

My Plugin looks like this:

package
{
        import mx.collections.ArrayCollection;
        import mx.modules.ModuleBase;
        
        public class Plugin extends ModuleBase
        
        public function startup():void
        {
                
        }
.
.
.
}

and

package 
{
        import Plugin;
        
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
        import mx.modules.ModuleBase;
    
        public class Foo extends Plugin
        {
                public function Foo()
                {
                        trace("foo constructor invoked");
                }

                override public function startup():void
                {
                    trace("foo started");
                }
.
.
.
}



Reply via email to