How to make sure the right singleton gets injected in a loaded module context?
I am having troubles with the injection of singleton (mapSingletonOf()) in the module contexts. The problem is that the first time it works correctly but the second time the services gets injected correctly in the shell class but when I then want to inject the same singleton in a loaded SWF file it still uses the old instance and not the new one.
Does anyone know why this could happen?
Comments are currently closed for this discussion. You can start a new one.
Keyboard shortcuts
Generic
? | Show this help |
---|---|
ESC | Blurs the current field |
Comment Form
r | Focus the comment reply box |
---|---|
^ + ↩ | Submit the comment |
You can use Command ⌘
instead of Control ^
on Mac
Support Staff 1 Posted by Till Schneidere... on Oct 10, 2011 @ 01:47 PM
Can you describe what "the right singleton" means, exactly? Should all
module contexts share their parent's singleton, or should they all
have their own instance?
2 Posted by Weyert on Oct 10, 2011 @ 02:10 PM
The problem I am having is that I am have a class called SequenceContext in the shell application which deals with the playing a bunch of child SWFs. After all these child SWFs are played. The SequenceContext will unmap the injections created by startup() when shutdown() gets called.
After the
SHUTDOWN_COMPLETE
event is dispatched the shell application instantiates a new instance of theSequenceContext
and then new mappings are created. Now if I inject my singleton in a command of theSequenceContext
it uses the correct instance. Only in the SWF file loaded by thisSequenceContext
its using the older instance. I am confused why :(At the moment of a bunch of trial-and-error the mapping doesn't exists anymore. While it all worked fine for the first instantiated
SequenceContext
.3 Posted by Weyert on Oct 10, 2011 @ 02:15 PM
If I check via breakpoints the injector variable attendedToInjectees field does have multiple entries for the same class:
Could this cause problems? I expected it had unmapped the injection???
Support Staff 4 Posted by Till Schneidere... on Oct 10, 2011 @ 02:22 PM
Interesting problem ;)
I'm afraid I can't be of much help without seeing some kind of a
test-case. Ideally, that would be a reduced case that exposes the
problem, but if you'd be willing to send me your source by private
mail, I could also offer to take a look at your that, guaranteeing
non-disclosure, of course. In that case, please add information about
how to reproduce the symptoms in a debugger.
5 Posted by Weyert on Oct 10, 2011 @ 02:30 PM
Do you happen to have Skype?
6 Posted by simon on Oct 10, 2011 @ 02:34 PM
Maybe a wild guess here but I have a sneaky suspicion your re-loading cached SWF's?
If this is the case the I would check your clear up within the actual module. So on unloading your modules I would first call (unless you already are) a destroy() method within your module which will run a rampage throughout the module clearing up all references. Then call the Shell to unload the module....
Support Staff 7 Posted by Till Schneidere... on Oct 10, 2011 @ 03:25 PM
Weyert and I discussed the problem over Skype and it looks like it
might be related to passing a wrong Injector into the modules.
8 Posted by Weyert on Oct 10, 2011 @ 09:44 PM
I have found the solution. I was injecting the main injector instance of the shell application into the loaded module. This was causing trouble in paradise. Moved the view factory a few levels down and it started the work. A view here represents different content types (video, images, swf, module [swf with dynamic data support]).
Tomorrow, I will spend the morning to do regression testing. But I am having a good feeling the problem is solved now. Phew. That took a long time! Thanks all for your help ('rubber duck debugging' ;-)
Weyert closed this discussion on Oct 10, 2011 @ 09:44 PM.