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.