Packages

t

izumi.distage

Subcontext

trait Subcontext[A] extends AnyRef

See also

Subcontexts feature

Linear Supertypes
AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Subcontext
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Abstract Value Members

  1. abstract def plan: Plan
  2. abstract def produce[F[_]]()(implicit arg0: QuasiIO[F], arg1: TagK[F]): Lifecycle[F, A]
  3. abstract def produceRun[F[_], B](f: (A) => F[B])(implicit arg0: QuasiIO[F], arg1: TagK[F]): F[B]

    Same as .produce[F]().use(f)

    Same as .produce[F]().use(f)

    Note

    Resources allocated by the subcontext will be closed after f exits. Use produce if you need to extend the lifetime of the Subcontext's resources.

  4. abstract def provide[T](name: Identifier)(value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
  5. abstract def provide[T](value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
  6. abstract def unsafeModify[B](f: (Functoid[A]) => Functoid[B]): Subcontext[B]

    Unsafely substitute the Functoid that extracts the root component.

    Unsafely substitute the Functoid that extracts the root component.

    Note, because the plan has been calculated ahead of time with A as the root, it's not possible to request additional components via Functoid that weren't already in the graph as dependencies of A – everything that A doesn't depend is not in the plan.

    Example:

    val submodule = new ModuleDef {
      make[Int].fromValue(3)
      make[Int].named("five").from((_: Int) + 2)
      make[String].fromValue("x")
    }
    
    makeSubcontext[Int].named("five").withSubmodule(submodule)
    
    ...
    
    (subcontext: Subcontext[Int])
      .unsafeModify(_ => Functoid.identity[String])
      .produceRun(println(_))
      // error: `String` is not available

    A binding for String is defined in the submodule, but is not referenced by Int @Id("five") binding. Therefore it was removed by garbage collection and cannot be extracted with this Subcontext. You'd have to create another Subcontext[String] with the same submodule to create String:

    makeSubcontext[String](submodule)
    
    ...
    
    (subcontext: Subcontext[String])
      .produceRun(println(_))
      // x

    If you DO need dynamic replanning, you'll need to use nested injection directly.

Concrete Value Members

  1. final def map[B](f: (A) => B)(implicit arg0: Tag[B]): Subcontext[B]
  2. final def produceRunSimple[B](f: (A) => B): B

Deprecated Value Members

  1. final def produceRun[B](f: (A) => B): B
    Annotations
    @deprecated
    Deprecated

    (Since version 1.2.17) Renamed to produceRunSimple