We can likely make this work for scala-guice in a similar manner to the
Multibinder wrapper.

Thomas Suckow


On Wed, Apr 2, 2014 at 11:09 AM, Christian Gruber <[email protected]>wrote:

> Let's get the OSGI fix in, and THEN cut beta5.
>
> c.
>
>
> On 2 Apr 2014, at 10:57, Sam Berlin wrote:
>
>  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.
>>
>
>
> 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.
>

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