Thanks! In my case it was necessary to have parameters in the constructor, but I found the discussion that followed very interesting.
My first iteration that worked followed the assisted injection model, but I found it to be a little more straightforward to use field injection. I suppose the choice boils down to the individual situation. I had 6 parameters required on instantiation, and one necessary injected variable that did not need to be private. Rather than annotate 6 variables and have Guice add the 7th, I chose to simply inject the 7th as a member variable directly rather than in the constructor. I'm sure in a lot of situations it's easier to do the reverse. I'm also sure in a lot of situations you want to put more thought into things than I did, but I was simply refactoring some code for logical separation and readability. On Wednesday, April 10, 2013 11:27:12 PM UTC-7, scl wrote: > > If your factory method has no arguments it is easier to remove the > factory and have guice inject a Provider<MyClass> instead of the factory > > see: http://code.google.com/p/google-guice/wiki/InjectingProviders > > > On 04/11/2013 04:33 AM, Newbie McBozo wrote: > > Thanks for your help guys, I figured it out. > > The way I attacked this was this: > > I created a factory interface. I then added a line to the configure > function of the module: > > binder.install(new FactoryModuleBuilder().build(MyClassFactory.class)); > > rather than calling "new" for new instances of the class, I inject a > factory and call MyClassFactory.create(). > > I'm not explaining it very well, but my code is working. The variables > that I was trying to inject are now resolving appropriately. > > On Wednesday, April 10, 2013 5:09:25 PM UTC-7, Newbie McBozo wrote: >> >> I get that, and forgive me for being dense, but I don't get how to make >> it so that my class is created by Guice so that my injections will work. >> >> I see that the application provides a module that's called on startup. >> Within that module I see a series of functions that call binder.bind and in >> all of those classes I see that injection works. >> >> Looking at that, I would think that I could binder.bind my own class but >> that doesn't seem to work. I could have syntax issues, but my sense is >> that there's a fundamental thing that I'm missing. >> >> On Wednesday, April 10, 2013 4:15:28 PM UTC-7, Thomas Broyer wrote: >>> >>> Dependency Injection 101: only objects created by the DI container >>> (Guice in this case) are injected; this means only objects that have been >>> retrieved from the Injector (through its getInstance method generally) or >>> have themselves been injected into other classes. It's possible to inject >>> objects that you 'new' yourself (or more generally have not been created by >>> Guice itself), but again it has to be explicit: >>> https://code.google.com/p/google-guice/wiki/Injections#On-demand_Injection >>> >>> On Thursday, April 11, 2013 12:21:20 AM UTC+2, Newbie McBozo wrote: >>>> >>>> I'm working with an application that uses Guice. >>>> >>>> I know nothing about guice, and parsing the documentation for my >>>> particular situation hasn't been easy. >>>> >>>> I have a java class. That class needs an object provided by the >>>> application. >>>> >>>> If I subclass an application provided class and override it's binding, >>>> obtaining the object is a matter of >>>> @Inject >>>> AppObject ao >>>> >>>> Within my own classes, if I try that, the injected object is null. >>>> >>>> How do I set up my own classes so that when I instantiate them, the >>>> injected fields are resolved? >>>> >>>> I imagine that I need to bind my class, but I'm having difficulty >>>> figuring it how to do that without spending time learning way more about >>>> Guice than this fairly simple (and I imagine common) situation really >>>> should require. >>>> >>> -- > You received this message because you are subscribed to the Google Groups > "google-guice" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To post to this group, send email to [email protected]<javascript:> > . > Visit this group at http://groups.google.com/group/google-guice?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > > > > -- You received this message because you are subscribed to the Google Groups "google-guice" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/google-guice?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
