izumi.distage.model.definition

Members list

Type members

Classlikes

final case class Activation(activeChoices: Map[Axis, AxisChoice]) extends AnyVal

Selection of active choices among those available in an Activation Axis

Selection of active choices among those available in an Activation Axis

 import distage.{Activation, Repo, Mode}

 Activation(
   Repo -> Repo.Prod,
   Mode -> Mode.Test,
 )

Attributes

See also
Companion
object
Supertypes
trait Serializable
trait Product
trait Equals
class AnyVal
trait Matchable
class Any
Show all
object Activation

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
Activation.type
object Axis

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
Axis.type
trait Axis

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Cycles
object Mode
object Repo
object Scene
object World
Self type
sealed trait Binding

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Binding

Attributes

Companion
trait
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
Binding.type
case class BindingOrigin(position: SourceFilePosition)

Attributes

Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

An attachment that can be added to a binding using its .tagged method

An attachment that can be added to a binding using its .tagged method

Attributes

Note

an inheritor of BindingTag must be an immutable case class and all of its fields must be used in equals / hashCode.

Companion
object
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class ConfTag
class AxisTag
object Confined
object Exposed
class RoleTag
Self type
Product
object BindingTag

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
BindingTag.type
object Bindings

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
Bindings.type

Attributes

Companion
object
Supertypes
trait ModuleBase
class Object
trait Matchable
class Any
Show all
Known subtypes

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
trait BootstrapModule extends ModuleBase

Attributes

Companion
object
Supertypes
trait ModuleBase
class Object
trait Matchable
class Any
Known subtypes

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
trait DIStageAnnotation extends StaticAnnotation, TypeConstraint

Attributes

Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
Show all
Known subtypes
class ConfigDoc
class Id
class With[T]
class impl
final class Id(val name: String) extends DIStageAnnotation

Annotation for summoning named instances.

Annotation for summoning named instances.

Example:

 val module = new ModuleDef {
   make[Int].named("three").from(3)
   make[Int].named("five").from(5)
 }

 Injector().produce(module).run {
   (five: Int @Id("five"), three: Int @Id("three")) =>
     assert(5 == five)
     assert(3 == three)
 }

Attributes

Note

javax.inject.Named annotation is also supported

Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
Show all
abstract class Identifier

Type of a name for a named instance, which can be any type that implements izumi.distage.model.reflection.IdContract typeclass, e.g. String

Type of a name for a named instance, which can be any type that implements izumi.distage.model.reflection.IdContract typeclass, e.g. String

Example:

 implicit val idInt: IdContract[Int] = new IdContract.IdContractImpl[Int]

 val module = new ModuleDef {
   make[Int].named(3).from(3)
   make[Int].named(5).from(5)
 }

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
object Identifier

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
Identifier.type
sealed abstract class ImplDef extends Product, CachedProductHashcode

Attributes

Companion
object
Supertypes
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
Known subtypes
object ImplDef

Attributes

Companion
class
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
ImplDef.type
object LocatorDef

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
LocatorDef.type

Attributes

Companion
trait
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
sealed trait LocatorPrivacy

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Module

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
Module.type
object ModuleBase

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
ModuleBase.type
trait ModuleDef extends Module, ModuleDefDSL

DSL for defining module Bindings.

DSL for defining module Bindings.

Example:

class Program[F[_]: TagK] extends ModuleDef {
 make[TaglessProgram[F]]
}

object TryInterpreters extends ModuleDef {
 make[Validation.Handler[Try]].from(tryValidationHandler)
 make[Interaction.Handler[Try]].from(tryInteractionHandler)
}

// Combine modules into a full program
val TryProgram = new Program[Try] ++ TryInterpreters

Singleton bindings:

  • make[X] = create X using its constructor
  • makeTrait[X] = create an abstract class or a trait X using izumi.distage.constructors.TraitConstructor (Auto-Traits feature)
  • makeFactory[X] = create a "factory-like" abstract class or a trait X using izumi.distage.constructors.FactoryConstructor (Auto-Factories feature)
  • make[X].from[XImpl] = bind X to its subtype XImpl using XImpl's constructor
  • make[X].fromTrait[XImpl] = bind X to its abstract class or a trait subtype XImpl, deriving constructor using izumi.distage.constructors.TraitConstructor (Auto-Traits feature)
  • make[X].fromFactory[XImpl] = bind X to its "factory-like" abstract class or a trait subtype XImpl, deriving constructor using izumi.distage.constructors.FactoryConstructor (Auto-Factories feature)
  • make[X].from(myX) = bind X to an already existing instance myX
  • make[X].from { y: Y => new X(y) } = bind X to an instance of X constructed by a given Functoid requesting an Y parameter
  • make[X].from { y: Y @Id("special") => new X(y) } = bind X to an instance of X constructed by a given Functoid, requesting a named "special" Y parameter
  • make[X].from { y: Y => new X(y) }.annotateParameterY = bind X to an instance of X constructed by a given Functoid, requesting a named "special" Y parameter
  • make[X].named("special") = bind a named instance of X. It can then be summoned using Id annotation.
  • make[X].using[X]("special") = bind X to refer to another already bound named instance at key [X].named("special")
  • make[X].fromEffect(X.create[F]: F[X]) = create X using a purely-functional effect X.create in F monad
  • make[X].fromResource(X.resource[F]: Lifecycle[F, X]) = create X using a Lifecycle value specifying its creation and destruction lifecycle
  • make[X].from[XImpl].modify(fun(_)) = Create X using XImpl's constructor and apply fun to the result
  • make[X].from[XImpl].modifyBy(_.flatAp { (c: C, d: D) => (x: X) => c.method(x, d) }) = Create X using XImpl's constructor and modify its Functoid using the provided lambda - in this case by summoning additional C & D dependencies and applying C.method to X

Set bindings:

  • many[X].add[X1].add[X2] = bind a Set of X, and add subtypes X1 and X2 created via their constructors to it. Sets can be bound in multiple different modules. All the elements of the same set in different modules will be joined together.
  • many[X].add(x1).add(x2) = add instances x1 and x2 to a Set[X]
  • many[X].add { y: Y => new X1(y).add { y: Y => X2(y) } = add instances of X1 and X2 constructed by a given Provider function
  • many[X].named("special").add[X1] = create a named set of X, all the elements of it are added to this named set.
  • many[X].ref[XImpl] = add a reference to an already existing binding of XImpl to a set of X's
  • many[X].ref[X]("special") = add a reference to an existing named binding of X to a set of X's

Mutators:

  • modify[X](fun(_)) = add a modifier applying fun to the value bound at X (mutator application order is unspecified)
  • modify[X].by(_.flatAp { (c: C, d: D) => (x: X) => c.method(x, d) }) = add a modifier, applying the provided lambda to a Functoid retrieving X - in this case by summoning additional C & D dependencies and applying C.method to X

Tags:

  • make[X].tagged("t1", "t2) = attach tags to X's binding.
  • many[X].add[X1].tagged("x1tag") = Tag a specific element of X. The tags of sets and their elements are separate.
  • many[X].tagged("xsettag") = Tag the binding of empty Set of X with a tag. The tags of sets and their elements are separate.

Includes:

  • include(that: ModuleDef) = add all bindings in that module into this module

Attributes

See also

TagK

Id

ModuleDefDSL

Supertypes
Known subtypes
object ModuleMake

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
ModuleMake.type
trait ModuleMake[+T <: ModuleBase] extends Aux[T, T]

Attributes

Companion
object
Supertypes
trait Aux[T, T]
class Object
trait Matchable
class Any
object StandardAxis

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
final class With[T] extends DIStageAnnotation

This annotation lets you choose a more specific implementation for a result of factory method other than its return type.

This annotation lets you choose a more specific implementation for a result of factory method other than its return type.

Example:

 trait Actor {
   def id: UUID
 }

 trait ActorFactory {
   @With[ActorImpl]
   def newActor(id: UUID): Actor
 }

 class ActorImpl(val id: UUID, someDependency: SomeDependency) extends Actor
 class SomeDependency

 val module = new ModuleDef {
   make[ActorFactory]
   // generated factory implementation:
   //
   // make[ActorFactory].from {
   //  (someDependency: SomeDependency) =>
   //    new ActorFactory {
   //      override def newActor(id: UUID): Actor = {
   //        new ActorImpl(id, someDependency)
   //      }
   //    }
   // }
 }

Attributes

See also
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
Show all
final class impl extends DIStageAnnotation

An optional, documentation-only annotation conveying that an abstract class or a trait is the 'actual' implementation of its supertypes and will be bound later in DI with izumi.distage.constructors.TraitConstructor or izumi.distage.constructors.FactoryConstructor

An optional, documentation-only annotation conveying that an abstract class or a trait is the 'actual' implementation of its supertypes and will be bound later in DI with izumi.distage.constructors.TraitConstructor or izumi.distage.constructors.FactoryConstructor

Abstract classes or traits without obvious concrete subclasses may hinder the readability of a codebase, if you still want to use them to avoid writing the full constructor, you may use this annotation to aid the reader in understanding your intentions.

 @impl abstract class Impl(
   pluser: Pluser
 ) extends PlusedInt

Attributes

See also
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
Show all

Types

type Lifecycle[+F[_], +OuterResource] = Lifecycle[F, OuterResource]
type Lifecycle2[+F[_, _], +E, +A] = Lifecycle2[F, E, A]
type Lifecycle3[+F[_, _, _], -R, +E, +A] = Lifecycle3[F, R, E, A]

Value members

Concrete fields

final val Lifecycle: Lifecycle.type