No way to extend it to provide other wrapper classes, no.  Although you
could pretty easily write a wrapper around it (e.g, ScalaOptionBinder) that
binds your custom wrapper to something that delegates to Optional<T> (and
Optional<Provider<T>, etc.).  That'd require users to use your wrapping
binder, though.   If you don't want to do that, you could use the Guice SPI
to analyze all module elements & automatically create new bindings for
anything that's an OptionalBinderBinding, delegating to the actual/default
values.

The latest push included one
commit<https://code.google.com/p/google-guice/source/detail?r=bab9b6082ff7c3aefac2dc8c7de0468fe60fe8f6>that
we had to rollback internally (we're not exactly sure what's going
wrong, but it caused a few tests in one project to become flaky).. so we
could theoretically cut a new beta with the rollback.  But hopefully we can
figure out what's going wrong, fix it, and cut a better beta.

 sam


On Wed, Apr 2, 2014 at 1:46 PM, Nate Bauernfeind <[email protected]
> wrote:

> I'm very excited about this; are you going to cut another beta release
> anytime soon?
>
> Is it possible to extend this to use other wrapper classes? I'd like to
> add this to the Scala-Guice project for Scala's option class if possible.
> On Apr 1, 2014 7:33 PM, "Sam Berlin" <[email protected]> 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].
>> 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.
>>
>  --
> 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.
>

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

Reply via email to