Packages

trait AbstractBindingDefDSL[BindDSL[_], BindDSLAfterFrom[_], SetDSL[_]] extends AbstractBindingDefDSLMacro[BindDSL]

Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. AbstractBindingDefDSL
  2. AbstractBindingDefDSLMacro
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Type Members

  1. final class MutationContext extends AnyRef

    Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.

    Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.

    Example:

    import distage.{ClassConstructor, Tag, ModuleDef}
    import izumi.distage.model.definition.dsl.ModuleDefDSL
    
    trait RegisteredComponent
    class RegisteredComponentImpl extends RegisteredComponent
    
    def addAndRegister[T <: RegisteredComponent: Tag: ClassConstructor](implicit mutateModule: ModuleDefDSL#MutationContext): Unit = {
      new mutateModule.dsl {
        make[T]
    
        many[RegisteredComponent]
          .weak[T]
      }
    }
    
    new ModuleDef {
      addAndRegister[RegisteredComponentImpl]
    }

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def _initialState: ArrayBuffer[BindingRef]
    Attributes
    protected[this]
  5. final def _make[T](provider: Functoid[T])(implicit arg0: Tag[T], pos: CodePositionMaterializer): BindDSL[T]
    Attributes
    protected[this]
  6. def _registered[T <: BindingRef](bindingRef: T): T
    Attributes
    protected[this]
  7. final def addImplicit[T](implicit arg0: Tag[T], instance: T, pos: CodePositionMaterializer): BindDSLAfterFrom[T]

    Same as make[T].from(implicitly[T]) *

    Same as make[T].from(implicitly[T]) *

    Attributes
    protected[this]
  8. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  9. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  10. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  11. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  12. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  13. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  14. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  15. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  16. final macro def make[T]: BindDSL[T]
    Attributes
    protected[this]
    Definition Classes
    AbstractBindingDefDSLMacro
  17. final def makeFactory[T](implicit arg0: Tag[T], arg1: FactoryConstructor[T]): BindDSLAfterFrom[T]

    Attributes
    protected[this]
    See also

    Auto-Factories feature

  18. final def makeSubcontext[T](implicit arg0: Tag[T]): SubcontextDSL[T]

    Attributes
    protected[this]
    See also

    Subcontexts feature

  19. final def makeSubcontext[T](submodule: ModuleBase)(implicit arg0: Tag[T]): SubcontextDSL[T]

    Attributes
    protected[this]
    See also

    Subcontexts feature

  20. final def makeTrait[T](implicit arg0: Tag[T], arg1: TraitConstructor[T]): BindDSLAfterFrom[T]

    Attributes
    protected[this]
    See also

    Auto-Traits feature

  21. final def many[T](implicit tag: Tag[Set[T]], pos: CodePositionMaterializer): SetDSL[T]

    Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.

    Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.

    To define a multibinding use .many and .add methods in ModuleDef DSL:

    import cats.effect._, org.http4s._, org.http4s.dsl.io._, scala.concurrent.ExecutionContext.Implicits.global
    import distage._
    
    object HomeRouteModule extends ModuleDef {
      many[HttpRoutes[IO]].add {
        HttpRoutes.of[IO] { case GET -> Root / "home" => Ok(s"Home page!") }
      }
    }

    Set bindings defined in different modules will be merged together into a single Set. You can summon a created Set by type Set[T]:

    import cats.implicits._, org.http4s.server.blaze._, org.http4s.implicits._
    
    object BlogRouteModule extends ModuleDef {
      many[HttpRoutes[IO]].add {
        HttpRoutes.of[IO] { case GET -> Root / "blog" / post => Ok("Blog post ``$post''!") }
      }
    }
    
    class HttpServer(routes: Set[HttpRoutes[IO]]) {
      val router = routes.foldK
    
      def serve = BlazeBuilder[IO]
        .bindHttp(8080, "localhost")
        .mountService(router, "/")
        .start
    }
    
    val objects = Injector().produce(HomeRouteModule ++ BlogRouteModule)
    val server = objects.get[HttpServer]
    
    val testRouter = server.router.orNotFound
    
    testRouter.run(Request[IO](uri = uri("/home"))).flatMap(_.as[String]).unsafeRunSync
    // Home page!
    
    testRouter.run(Request[IO](uri = uri("/blog/1"))).flatMap(_.as[String]).unsafeRunSync
    // Blog post ``1''!
    Attributes
    protected[this]
    See also

    Guice wiki on Multibindings: https://github.com/google/guice/wiki/Multibindings

  22. final def modify[T]: ModifyDSL[T, BindDSL, BindDSLAfterFrom, SetDSL]

    Modify a value bound at T.

    Modify a value bound at T. Modifiers stack and are all applied before T is added to the object graph; only the final instance is observable.

    import distage.{Injector, ModuleDef}
    
    Injector().produceGet[Int](new ModuleDef {
      make[Int].from(1)
      modify[Int](_ + 1)
      modify[Int](_ + 1)
    }).use(i => println(s"Got `Int` $i"))
    // Got `Int` 3

    You can also modify while summoning additional dependencies:

    modify[Int]("named").by(_.flatAp {
      (adder: Adder, multiplier: Multiplier) =>
        int: Int =>
          multiplier.multiply(adder.add(int, 1), 10)
    })
    Attributes
    protected[this]
  23. implicit final lazy val mutationContext: MutationContext
    Attributes
    protected[this]
  24. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  25. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  26. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  27. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  28. def toString(): String
    Definition Classes
    AnyRef → Any
  29. final def todo[T](implicit arg0: Tag[T], pos: CodePositionMaterializer): BindDSLAfterFrom[T]

    Create a dummy binding that throws an exception with an error message when it's created.

    Create a dummy binding that throws an exception with an error message when it's created.

    Useful for prototyping.

    Attributes
    protected[this]
  30. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  31. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  32. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AbstractBindingDefDSLMacro[BindDSL]

Inherited from AnyRef

Inherited from Any

Ungrouped