class SubcontextImpl[A] extends Subcontext[A]
- Alphabetic
- By Inheritance
- SubcontextImpl
- Subcontext
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
Value Members
- val externalKeys: Set[DIKey]
- val functoid: Functoid[A]
- final def map[B](f: (A) => B)(implicit arg0: Tag[B]): Subcontext[B]
- Definition Classes
- Subcontext
- val parent: LocatorRef
- val plan: Plan
- Definition Classes
- SubcontextImpl → Subcontext
- def produce[F[_]]()(implicit arg0: QuasiIO[F], arg1: TagK[F]): Lifecycle[F, A]
- Definition Classes
- SubcontextImpl → Subcontext
- 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
- SubcontextImpl → Subcontext
- Note
Resources allocated by the subcontext will be closed after
f
exits. Useproduce
if you need to extend the lifetime of the Subcontext's resources.
- final def produceRunSimple[B](f: (A) => B): B
- Definition Classes
- Subcontext
- def provide[T](name: Identifier)(value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
- Definition Classes
- SubcontextImpl → Subcontext
- def provide[T](value: T)(implicit arg0: Tag[T], pos: CodePositionMaterializer): Subcontext[A]
- Definition Classes
- SubcontextImpl → Subcontext
- val providedExternals: Map[DIKey, AnyRef]
- val selfKey: DIKey
- 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 withA
as the root, it's not possible to request additional components via Functoid that weren't already in the graph as dependencies ofA
– everything thatA
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 byInt @Id("five")
binding. Therefore it was removed by garbage collection and cannot be extracted with this Subcontext. You'd have to create anotherSubcontext[String]
with the same submodule to createString
: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
- SubcontextImpl → Subcontext
Deprecated Value Members
- final def produceRun[B](f: (A) => B): B
- Definition Classes
- Subcontext
- Annotations
- @deprecated
- Deprecated
(Since version 1.2.17) Renamed to produceRunSimple