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.

Reply via email to