Hi Google guice users.
I have a rather large Legacy Code which previously was very
dependendent on a Singleton design pattern. Basically everywhere I
was dependant on SingletonManager, which gave me access to global
state, etc, while making it impossible to test parts of the code
independantly.
I recently introduced Google Guice to the code and have been
attempting to seperate dependancies in the code, with some success :)
One thing that shocked me today, my code starts and seems to work , by
asking the Injector to provide a Frame, I get one SingletonManager
from the @Inject annotations in my Frame and another when I previously
call the same injector and request a SingletonManager
///from my Module:
bind(SingletonManager.class).to(SingletonManagerImpl.class).in(Scopes.SINGLETON);
///my main method:
SingletonManager mgr =
SingletonManagerFactory.getInjector().getInstance(MainFrame.class);
//do some legacy stuff
//now initialise the GUI (and the main Object tree).
MainFrame mainFrame;
if (CsConstants.USE_GOOGLE_GUICE_INJECTION == true) {
mainFrame =
SingletonManagerFactory.getInjector().getInstance(MainFrame.class);
} else {
mainFrame = new MainFrameImpl();
}
//use the frame (pack, etc)....
///a class annoted with @Inject
public class AClass implements XXX {
private SingletonManager mgr;
@Inject
public AClass(SingletonManager mgr) {
this.mgr = mgr;
}
}
///code when I need an Instance of the SingletonManager class for
Legacy code
public static SingletonManager getInstance()
{
if(instance==null)
{
//returns aa DIFFERENT instance of this
instance =
getInjector().getInstance(SingletonManager.class);
}
return instance;
}
Now when the MainFrame is created Google Guice goes through the code
and creates all my classes. It works great:)
Now the problem is, because my code base is rather large, I don't have
time to change all the code to injection. In some places this will be
very difficult e.g. classes initialized by the Netbeans GUI designer
(not a good choice for Dependency Injection). So in these places where
due to time or difficulty I sometimes use my old Singleton class. Now
here is my problem, I recently discovered that I get 2 instances of a
class which is scoped as Singleton.
1. In the initial object tree creation.
2. When I call SingletonManagerFactory.getInstance()
Am I stupid? is this a bug? what should I do differently? Do you need
a complete test case?
I swear, due to my Singleton I only have 1 injector!
Thanks
Martin
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en.