Yeah - I can see Dagger borrowing back the approach for Optional
provides, though having no access to an Optional in dagger is tricky
(targeting Java6 without non-JSR dependencies, like Guava). We'll have
to figure it out. At least we might be able to do the default approach
though.
c.
On 2 Apr 2014, at 7:37, Tavian Barnes wrote:
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
<[email protected]<javascript:>
wrote:
That's excellent
On Wed, Apr 2, 2014 at 1:33 AM, Sam Berlin
<[email protected]<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 [email protected] <javascript:>.
To post to this group, send email to
[email protected]<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 [email protected] <javascript:>.
To post to this group, send email to
[email protected]<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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/d/optout.
Christian Gruber :: Google, Inc. :: Java Core Libraries :: Dependency
Injection
email: [email protected] :::: mobile: +1 (646) 807-9839
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/d/optout.