Packages

class SubcontextImpl[A] extends Subcontext[A]

Linear Supertypes
Subcontext[A], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. SubcontextImpl
  2. Subcontext
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new SubcontextImpl(externalKeys: Set[DIKey], parent: LocatorRef, plan: Plan, functoid: Functoid[A], providedExternals: Map[DIKey, AnyRef], selfKey: DIKey)

Value Members

  1. val externalKeys: Set[DIKey]
  2. val functoid: Functoid[A]
  3. final def map[B](f: (A) => B)(implicit arg0: Tag[B]): Subcontext[B]
    Definition Classes
    Subcontext
  4. val parent: LocatorRef
  5. val plan: Plan
    Definition Classes
    SubcontextImplSubcontext
  6. def produce[F[_]]()(implicit arg0: QuasiIO[F], arg1: TagK[F]): Lifecycle[F, A]
    Definition Classes
    SubcontextImplSubcontext
  7. 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)

    Definition Classes
    SubcontextImplSubcontext
    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.

  8. final def produceRunSimple[B](f: (A) => B): B
    Definition Classes
    Subcontext
  9. def provide[T](name: Identifier)(value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
    Definition Classes
    SubcontextImplSubcontext
  10. def provide[T](value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
    Definition Classes
    SubcontextImplSubcontext
  11. val providedExternals: Map[DIKey, AnyRef]
  12. val selfKey: DIKey
  13. 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.

    Definition Classes
    SubcontextImplSubcontext

Deprecated Value Members

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

    (Since version 1.2.17) Renamed to produceRunSimple