For 2. there was never a "new" but rather injector.getInstance(SingletonManager.class), so it was also being created by Guice, but by 2 seperate calls to getInstance. Should I try to create a test case to explain the "problem" in greater detail?
On 17 Jun., 23:08, Fred Faber <[email protected]> wrote: > 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.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. > > > -- > > 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.
