Thanks for finding that thread.  That is the exact problem I'm running 
into.  As the thread suggests and as I've confirmed with some simple 
testing, annotations solve the problem.

-Stanton



From:   "Ciancetta, Jesse E." <jc...@mitre.org>
To:     "dev@shindig.apache.org" <dev@shindig.apache.org>, 
Date:   11/02/2011 01:04
Subject:        RE: Injecting global config contributors for the default 
config process



>-----Original Message-----
>From: Stanton Sievers [mailto:ssiev...@us.ibm.com]
>Sent: Monday, October 31, 2011 2:26 PM
>To: dev@shindig.apache.org
>Subject: RE: Injecting global config contributors for the default config 
process
>
>I just noticed one caveat with using the Multibinder.  I'm doing this:
>
>    Multibinder<ConfigContributor> configBinder = 
Multibinder.newSetBinder
>(binder(), ConfigContributor.class);
>    configBinder.addBinding().to(GlobalConfigContributor.class);
>
>Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
>GlobalConfigContributor class I've bound here as well as all of the 
values
>of the MapBinder for String->ConfigContributor that is bound in the
>DefaultConfigContributorModule.  I have to add an Annotation when I do
>Multibinder.newSetBinder to keep that from happening.  This doesn't 
happen
>when I remove my Multibinder and only have the MapBinder... odd.  It's
>like the MapBinder values are getting added to the Multibinder config
>automatically.

It sounds like this might be a bug in Guice -- I found this thread on the 
Guice discussion board which sounds similar to what you're describing:

http://groups.google.com/group/google-guice/browse_thread/thread/934e30b7ed0da98f


>Maybe that's why the original code is a List instead of a Set that uses
>Multibinder.
>
>-Stanton
>
>
>
>From:   "Ciancetta, Jesse E." <jc...@mitre.org>
>To:     "dev@shindig.apache.org" <dev@shindig.apache.org>,
>Date:   10/31/2011 12:30
>Subject:        RE: Injecting global config contributors for the default
>config process
>
>
>
>>-----Original Message-----
>>From: Stanton Sievers [mailto:ssiev...@us.ibm.com]
>>Sent: Monday, October 31, 2011 8:12 AM
>>To: dev@shindig.apache.org
>>Subject: Injecting global config contributors for the default config
>process
>>
>>Hi everyone,
>>
>>I've recently been looking at the ConfigContributor and ConfigProcessor
>>code and the workflow for getting configuration code the JavaScript side
>>of things.  In DefaultConfigProcessor there is a setGlobalContributors
>>method that is injectable and takes a List<ConfigContributor> as a
>>parameter.  How is this injectable via Guice?  I thought it could be 
done
>>with Multibinder but that only seems to allow Set contributions.  What 
is
>>the intended way to contribute a List<ConfigContributor> (or any List 
for
>>that matter) with Guice?
>
>It looks like you can use a TypeLiteral to do this:
>
>http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
>
>And if you search the Shindig codebase for usages of TypeLiteral you'll
>find a few examples of where it is indeed being used to setup List's for
>Guice injection.
>
>However this doesn't seem as flexible as using a Multibinder with a Set
>though since with Multibinder it seems you can append to the Set across
>any number of different Guice modules, and with the TypeLiteral approach 
I
>don't think that's possible.
>
>I'm far from a Guice expert though so if someone has a better solution
>please chime in.
>
>>I found this issue, however, the solution seems to be Multibinder. :)
>>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>>
>>If there's no good way to do this, I propose changing
>>setGlobalContributors to take a Set<ConfigContributor> so that
>Multibinder
>>can be used.  I don't think order or duplicate entries really matter for
>>this use case, so I don't see why a Set wouldn't work....
>
>Even though there does seem to be a workaround available I don't see any
>reason why this shouldn't be a Set -- and by making it a Set we can use
>Multibinder and gain the additional flexibility that buys us in terms of
>being able to add to the bindings across multiple Guice modules.
>
>>Thanks,
>>-Stanton
>
>
>




Reply via email to