Thank you all for your responses !

Problem is, my application has grown to the point that even the modules 
themselves have becoming an application.

So there are many objects created in different modules, needed by others...

What I really need is to be able to inject dependencies into module.

The ideal solution would be 
TestModule extends Module   {
   Inject SomeObjectCreatedInAFarWayModule someObject; 
 }

But that is not possible, so because of that I took a look at providers, 
which allow dependencies to be injected into modules.
My application has at least 100 modules by now, and growing.
So far I have used static public objects, but as everyone knows, that is 
bad practice.




Den lørdag den 8. marts 2014 00.07.22 UTC+1 skrev Nate Bauernfeind:
>
> @Provides are typically when you need to inject an instance of some 
> library out of your control that doesn't have any guice bindings. I try to 
> avoid using providers for any other use case. In your specific example, I 
> would do what Sam suggested and just simply inject the Settings object.
>
> I use dropwizard a lot and typically finding myself creating hierarchical 
> configuration objects, and passing the sub-configuration object to a 
> specific module. For example,
>
> class ApplicationConfiguration {
>   public DatabaseConfiguration data;
>   public TwitterConfiguration twitter;
>   ...
> }
>
> And then they map one-to-one to a top-level PrivateModule which accepts 
> the sub-configuration object as part of its constructor. Then I can easily 
> either inject the configuration class privately for that sub-portion of my 
> application, or do whatever I need to with it (like configure an http 
> client in a @Provides method).
>
> Happy Guicing! 
>
>
> On Fri, Mar 7, 2014 at 5:00 PM, Mikkel Petersen <mlp...@gmail.com<javascript:>
> > wrote:
>
>> Thanks for your response.
>>
>> It's seems overly complicated and I must admit, I don't understand it 
>> fully..though it properly works..I fail to see the usage of @Provides 
>> methods if the object provided doesn't have the object graph injected.
>>
>>
>>
>> Den fredag den 7. marts 2014 23.54.17 UTC+1 skrev Nate Bauernfeind:
>>>
>>> It's a bit more work, but you could consider using assisted injection 
>>> for this kind of use-case. My typical pattern looks like this:
>>>
>>> public class Example {
>>>     @Inject
>>>     public Example(@Assisted("host") String host
>>>                    HttpClient httpClient,
>>>                    ...) {
>>>        ...
>>>     }
>>>
>>>     /** This class is a Guice Assisted-Inject Factory. */
>>>     public static interface Factory {
>>>         Example newExample(@Assisted("host") String host);
>>>     }
>>> }
>>>
>>> ...
>>>
>>> public class ExampleModule {
>>>   void configure() {
>>>     bindFactory(Example.class, Example.Factory.class);
>>>   }
>>>
>>>   protected <T, F> void bindFactory(Class<T> klass, Class<F> 
>>> factoryKlass) {
>>>         bindFactory(klass, klass, factoryKlass);
>>>    }
>>> }
>>>
>>> And then you can still use a provider method (if you prefer!) and then 
>>> you inject the factory and the settings.
>>>
>>> @Provides
>>> public Example someExample(Example.Factory factory, Settings settings) {
>>>   return factory.newExample(settings.getHost());
>>> }
>>>
>>> Hope that helps! I use this pattern a lot, but not often mixed with a 
>>> Provider -- usually I have a class that manages the multiple instances 
>>> key'ed by some name (like client or user).
>>>
>>>
>>> On Fri, Mar 7, 2014 at 4:44 PM, Mikkel Petersen <mlp...@gmail.com>wrote:
>>>
>>>> Because I want to receive other bindings:
>>>> public Service someService(@Inject Settings settings)  {
>>>>   SomeService s =  new SomeService(settings.getHost())
>>>>   inj.injectMembers(s)
>>>>   return s
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>> Den fredag den 7. marts 2014 23.32.42 UTC+1 skrev Nate Bauernfeind:
>>>>>
>>>>> What about your use case prevents you from using a normal .to binding?
>>>>>
>>>>> bind(SomeService.class).to(SomeService.class)
>>>>>
>>>>> Nate
>>>>>
>>>>>
>>>>> On Fri, Mar 7, 2014 at 4:13 PM, Mikkel Petersen <mlp...@gmail.com>wrote:
>>>>>
>>>>>>  Hello all 
>>>>>>
>>>>>> I have a slight problem with guice injection when using a method 
>>>>>> annotated with  @Provides
>>>>>>
>>>>>> example :
>>>>>>
>>>>>> @Provides
>>>>>> public Service someService() {
>>>>>>  return new SomeService()
>>>>>> }
>>>>>>
>>>>>> I would like to get the current context injected in SomeService..I 
>>>>>> don't understand why Guice doesn't do that automatically, any particular 
>>>>>> reason for that ?
>>>>>>
>>>>>> I know I could do something like this (it works):
>>>>>>
>>>>>> @Provides
>>>>>> public Service someService(@Inject Injector inj)  {
>>>>>>   SomeService s =  new SomeService()
>>>>>>   inj.injectMembers(s)
>>>>>>   return s
>>>>>> }
>>>>>>
>>>>>> But there must be a simpler way.
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> Ps, another question, how to add syntax highlighting ?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>  -- 
>>>>>> 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 google-guice...@googlegroups.com.
>>>>>> To post to this group, send email to google...@googlegroups.com.
>>>>>>
>>>>>> Visit this group at http://groups.google.com/group/google-guice.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  -- 
>>>> 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 google-guice...@googlegroups.com.
>>>> To post to this group, send email to google...@googlegroups.com.
>>>> Visit this group at http://groups.google.com/group/google-guice.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> 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 google-guice...@googlegroups.com <javascript:>.
>> To post to this group, send email to google...@googlegroups.com<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/google-guice.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 google-guice+unsubscr...@googlegroups.com.
To post to this group, send email to google-guice@googlegroups.com.
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/d/optout.

Reply via email to