I suggested going specifically to StackOverflow, which is a website devoted
to programming questions/answers.

Additionally, I suggested a solution of Multibindings, which AFAICT is
specifically for the problem you outlined.

If you have further problems, I'm not sure I can help much more, though
others on this list may be able to.

 sam


On Sat, Mar 8, 2014 at 9:54 AM, Mikkel Petersen <mlp2...@gmail.com> wrote:

>
> Btw, Multibindings doesnt solve this..but I'm glad that you told me I do
> things wrong, without telling me why, and without providing an alternative
> solution. Did you even look at the sample ?
> Den lørdag den 8. marts 2014 15.51.21 UTC+1 skrev Mikkel Petersen:
>
>> Are you suggestion I should google around and ask ? thanks, would have
>> never thought about that..
>>
>> Den lørdag den 8. marts 2014 03.45.59 UTC+1 skrev Sam Berlin:
>>>
>>> I hate to break it to you, but it increasingly looks like you're making
>>> this much harder for yourself, using the framework in a way it's not
>>> intended.
>>>
>>> For this particular problem (adding things to a shared pool), there's an
>>> extension called Multibinder: http://code.google.com/p/
>>> google-guice/wiki/Multibindings .
>>>
>>> For other issues, you may want to consider asking for specific guidance
>>> and help in StackOverflow (or searching for existing questions/answers).  I
>>> suspect you'll find that things will become a lot simpler.
>>>
>>> sam
>>> On Mar 7, 2014 7:33 PM, "Mikkel Petersen" <mlp...@gmail.com> wrote:
>>>
>>>> It's hard for me to describe the entire problem..I was really just
>>>> looking for a solution to this, now it has turned into something else. But
>>>> fine, I'll try to explain my point further.
>>>>
>>>> Lets say its not fully possible to populate an object just from Module,
>>>> that other modules should have access to this object as well in order for
>>>> it to be fully ready for use.
>>>>
>>>> For example, we have an object NameList
>>>>
>>>> Module A {
>>>>  configure() {
>>>>       nameList = new NameList()
>>>>       bind(NameList.class).toInstance(nameList)
>>>>       name = new Name("peter")
>>>>        requestInjection(name)
>>>>       nameList.add(name)
>>>>    }
>>>> }
>>>>
>>>> Module B {
>>>>    Name name = new Name("James")
>>>>    requestInjection(name)
>>>>    nameList.addName(name)
>>>>
>>>> }
>>>>
>>>> Module B binds a new name, injects it, and adds it to the NameLIst. But
>>>> the namelist was created and bound in module A !! How will it get a
>>>> reference to NameList ?
>>>> We could do something like this
>>>>
>>>> GuiceStatics {
>>>>    public static NameList nameList
>>>> }
>>>> And access it from here. Or make a singleton factory or whatever.  But
>>>> why ? this is what Guice helps us to avoid !
>>>>
>>>> Point is, the entire module section of any application can grow into
>>>> something huge itself. And because of that, it needs dependency injection
>>>> itself.
>>>>
>>>>
>>>>
>>>>
>>>> Den lørdag den 8. marts 2014 01.22.37 UTC+1 skrev Sam Berlin:
>>>>>
>>>>> I don't understand why your modules need things injected.  The point
>>>>> of modules is to set up rules saying "this is bound to that" and "when
>>>>> someone wants this, give them that".  It does not require knowing the
>>>>> interrelationships of each object.  I highly suspect there's something
>>>>> fundamentally wrong with your setup, but it's hard to say for certain
>>>>> without knowing what you're doing.
>>>>>
>>>>>  sam
>>>>>
>>>>>
>>>>> On Fri, Mar 7, 2014 at 7:18 PM, Mikkel Petersen <mlp...@gmail.com>wrote:
>>>>>
>>>>>> I have already optimized each and every module..I have spent years
>>>>>> doing that, really. But they still run into the exact same problem that
>>>>>> Guice was supposed to solve: how do we get object A to object B.
>>>>>> With hundreds of modules, that problem will occur over and over..For
>>>>>> example, I have a list of Listeners in Module A. Module A binds them, 
>>>>>> plus
>>>>>> add some listener code to the list. Module XYZ23B now wants to add a
>>>>>> listener to this list as well. How ? Only solution right now is to have a
>>>>>> class that references this list public and statically. Now, you could 
>>>>>> say,
>>>>>> my logic is wrong. All logic concerned this listener list should be in 
>>>>>> one
>>>>>> module..but perhaps the two do not have much in common logic wise than 
>>>>>> this
>>>>>> object.
>>>>>>
>>>>>> Den lørdag den 8. marts 2014 01.08.14 UTC+1 skrev Nate Bauernfeind:
>>>>>>>
>>>>>>> I can't say that I've ever dealt with an experience of having 100+
>>>>>>> unique modules (now if you want to talk about 100+ child injectors 
>>>>>>> created
>>>>>>> from different instances of the same module (i.e. as a template)... now
>>>>>>> that I've done). I think my largest experience has sliced things up into
>>>>>>> maybe 15 modules; which is still quite a handful to manage.
>>>>>>>
>>>>>>> The biggest thing that I did that helped managed dependency
>>>>>>> relationships across modules was to prefer PrivateModules over 
>>>>>>> completely
>>>>>>> public AbstractModules. It made me really think about what each module 
>>>>>>> was
>>>>>>> being used for and what it exposed for use with the rest of the
>>>>>>> application. For example, I don't mind creating a different 
>>>>>>> ExecutorService
>>>>>>> that might be used in an entire sub-graph that is not shared across all 
>>>>>>> of
>>>>>>> my modules. In fact, limiting how portions of your application can
>>>>>>> interact, or interfere, with each other can dramatically improve your
>>>>>>> experience when debugging or fine-tuning certain things.
>>>>>>>
>>>>>>> Perhaps, migrating and merging some of your modules to each have a
>>>>>>> specific purpose might bring things back to being manageable and 
>>>>>>> meaningful
>>>>>>> for you.
>>>>>>>
>>>>>>> Additionally, I've had some experience here and there using Guava's
>>>>>>> EventBus to further decouple sub-systems by instead communicating with
>>>>>>> messages. For example instead of injecting the TwitterService and have
>>>>>>> every listener register itself as a listener, I instead can use the
>>>>>>> EventBus to subscribe to all messages of a type "TwitterEvent" and then 
>>>>>>> the
>>>>>>> messages get to the right places behind the scenes on my behalf (you 
>>>>>>> only
>>>>>>> need to add an @Subscribe assuming you let guice register your objects).
>>>>>>> This works well for data that flows as opposed to data that you need to
>>>>>>> pass back an answer (though I've tried this too by passing a settable
>>>>>>> Future as a means of a lightweight callback -- but I wasn't extremely
>>>>>>> satisfied, nor unsatisfied, with the result). The applications that I 
>>>>>>> have
>>>>>>> that use an event bus can typically remove a guice module from the list
>>>>>>> that gets passed into the injector and everything will still start up 
>>>>>>> and
>>>>>>> run appropriately -- just no one will get any TwitterEvents if that 
>>>>>>> module
>>>>>>> was removed.
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Mar 7, 2014 at 5:16 PM, Mikkel Petersen <mlp...@gmail.com>wrote:
>>>>>>>
>>>>>>>> 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>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.
>>>>>>>>>> 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.
>>>>>> 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+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.
>

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