izumi.distage.model.definition

Members list

Concise view

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
Graph
Supertypes
trait Serializable
trait Product
trait Equals
class AnyVal
trait Matchable
class Any
object Activation

Attributes

Companion:
class
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
trait Axis

Attributes

Companion:
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Mode.type
object Repo.type
object Scene.type
object World.type
Self type
object Axis

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
Axis.type
sealed trait Binding

Attributes

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

Attributes

Companion:
trait
Graph
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
Binding.type

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

Companion:
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class AxisTag
object BindingTag

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
object Bindings

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Companion:
object
Graph
Supertypes
trait CachedHashcode
class Object
trait Matchable
class Any
Known subtypes

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Graph
Supertypes
trait TagsDSL
trait CachedHashcode
class Object
trait Matchable
class Any

Attributes

Companion:
object
Graph
Supertypes
trait CachedHashcode
class Object
trait Matchable
class Any
Known subtypes

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Graph
Supertypes
trait TagsDSL
trait CachedHashcode
class Object
trait Matchable
class Any
trait DIStageAnnotation extends StaticAnnotation with TypeConstraint

Attributes

Graph
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
Known subtypes
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

Graph
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
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
Graph
Supertypes
class Object
trait Matchable
class Any
object Identifier

Attributes

Companion:
class
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
sealed abstract class ImplDef extends Product with CachedProductHashcode

Attributes

Companion:
object
Graph
Supertypes
trait CachedProductHashcode
trait Product
trait Equals
class Object
trait Matchable
class Any
Known subtypes
object ImplDef

Attributes

Companion:
class
Graph
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
ImplDef.type

Attributes

Companion:
object
Graph
Supertypes
object LocatorDef

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
trait Module extends ModuleBase

Attributes

Companion:
object
Graph
Supertypes
trait CachedHashcode
class Object
trait Matchable
class Any
Known subtypes
trait ModuleDef
object Module

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
Module.type
trait ModuleBase extends CachedHashcode

Attributes

Companion:
object
Graph
Supertypes
trait CachedHashcode
class Object
trait Matchable
class Any
Known subtypes
object ModuleBase

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
trait ModuleDef extends Module with ModuleDefDSL

DSL for defining module Bindings.

DSL for defining module Bindings.

Example:

class Program[F[_]: TagK: Monad] 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

ModuleDefDSL

Graph
Supertypes
trait TagsDSL
trait Module
trait CachedHashcode
class Object
trait Matchable
class Any
trait ModuleMake[+T <: ModuleBase] extends Aux[T, T]

Attributes

Companion:
object
Graph
Supertypes
trait Aux[T, T]
class Object
trait Matchable
class Any
object ModuleMake

Attributes

Companion:
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Graph
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:
Graph
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any
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:
Graph
Supertypes
trait TypeConstraint
trait StaticAnnotation
class Annotation
class Object
trait Matchable
class Any

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