In the first model your two instances came from:

1) Guice, creating its version of the singleton class
2) The logic within the static factory method of the class

In the injectMembers model, you only have Guice creating the instances that
are injected (I presume), meaning there's nothing else actually doing a
"new" on those classes.

Fred

On Fri, Jun 17, 2011 at 3:50 PM, Marty <
[email protected]> wrote:

> Hi Fred, thanks for your quick reply.
>
> That worked like a charm.
> For a moment I had a wonderful circle, where the SingletonFactory
> called its getInstance() (SingletonManager) -> getInjector -> new
> Module() -> getInstance(), so I had to revert to an older constructor
> and then "post inject" the other variables with
> injectMembers(instance).
>
> Now I could swear, I should have this problem later as well, (due to
> injectMembers), but it seems to only create 1 instance of the code,
> which is later reused in @Inject.  Shouldn't the members injected via
> injectMembers (which have the scope singleton) also have 2 instances
> as I had previously?
>
> Thanks
>
> Martin
>
> On 17 Jun., 20:58, Fred Faber <[email protected]> wrote:
> > The easy solution is to bind your SingletonManager to the instance that
> your
> > legacy code returns:
> >
> > bind(SingletonManager.class)
> >   .toInstance(SingletonManager.getInstance());
> >
> > then the inejcted instance will be the same as the one your legacy code
> > uses.
> >
> > Fred
> >
> > On Fri, Jun 17, 2011 at 2:51 PM, Marty <
> >
> >
> >
> > [email protected]> wrote:
> > > 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.SINGLĀ­ETON);
> >
> > > ///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.
>
> --
> 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.
>
>

-- 
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