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.
