I like it, similar to what Dagger has for @Provides(SET).

I also really like OptionalBinder.  Previously I used Modules.override(new 
OverridableBindingsModule(), ...) to provide default implementations.

On Wednesday, 2 April 2014 09:41:45 UTC-4, Sam Berlin wrote:
>
> I've been thinking also about some kind of syntax like:  
>
> MyModule extends AbstractModule {
>  configure() { install(Multibindings.forModule(this)); }
>  @OptionalProvides(DEFAULT) Foo provideDefaultFoo(..) { .. }
>  @OptionalProvides(ACTUAL) Foo provideActualFoo(..) { .. }
>  @SetProvides Foo provideItemForSetOfFoo(..) { .. }
>  @MapProvides MapBinderEntry<Key, Foo> provideItemForMapOfKeyToFoo(..) { 
> .. }
> }
>
> ... need to experiment and see if those pan out.
>
>  sam
>
>
> On Wed, Apr 2, 2014 at 9:20 AM, Filipe Sousa <nat...@gmail.com<javascript:>
> > wrote:
>
>> That's excellent
>>  
>>
>>
>> On Wed, Apr 2, 2014 at 1:33 AM, Sam Berlin <sbe...@gmail.com<javascript:>
>> > wrote:
>>
>>> Ever wanted to:
>>>   1) Set default binding in a library or framework that users can change?
>>>   2) Inject something into a library or framework that isn't required, 
>>> but would be better if a user could set it?
>>>   3) Inject an optional value into a constructor?
>>>
>>> OptionalBinder lets you do that.  Christian just pushed out some of our 
>>> recent internal changes, including the introduction of OptionalBinder to 
>>> the multibindings extension.
>>>
>>> Some example usage:
>>>
>>>  1) Setting a default binding that a user can override:
>>>    Library: *OptionalBinder.newOptionalBinder(binder(), Foo.class)*
>>> *                   .setDefault().to(DefaultFoo.class);*
>>>    At this point, code can inject '*Foo*' (or *Optional<Foo>)*, and 
>>> will get a *DefaultFoo.*
>>>
>>>    User: *OptionalBinder.newOptionalBinder(binder(), Foo.class)*
>>> *                  .setBinding().to(CustomFoo.class);* 
>>>    Once a user calls setBinding(), injections of *Foo* (or 
>>> *Optional<Foo>)* will start providing *CustomFoo* instead.
>>>
>>>  2) Setting a binding that isn't required (e.g, no default value), but a 
>>> user can supply.
>>>     Library: *OptionalBinder.newOptionalBinder(binder(), Foo.class);*
>>>    At this point, code *can't* inject *Foo* -- it will fail saying the 
>>> binding isn't supplied.  Code *can* (and should) inject *Optional<Foo>*, 
>>> though, and the optional will be absent.
>>>
>>>    User: *OptionalBinder.newOptionalBinder(binder(), Foo.class)*
>>> *                  .setBinding().to(CustomFoo.class);* 
>>>    Once a user calls setBinding(), *Optional<Foo>* will be present and 
>>> supply the *CustomFoo*.  Also, *Foo* can be directly injected now 
>>> (although only user could should do that, since the user code is the only 
>>> part that guarantees the binding will be there -- library code should still 
>>> inject the* Optional<Foo>*).
>>>
>>> Please report back if you have any issues or suggestions for improvement.
>>>
>>> Thanks!
>>>
>>>  sam
>>>
>>> -- 
>>> 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.
>>>
>>
>>
>>
>> -- 
>> Filipe Sousa
>>  
>> -- 
>> 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