Packages

case class ProviderMagnet[+R](get: reflection.universe.RuntimeDIUniverse.Provider) extends Product with Serializable

A function that receives its arguments from DI object graph, including named instances via com.github.pshirshov.izumi.distage.model.definition.Id annotation.

The following syntaxes are supported by extractor macro:

Inline lambda:

make[Unit].from {
  i: Int @Id("special") => ()
}

Method reference:

def constructor(@Id("special") i: Int): Unit = ()

make[Unit].from(constructor _)

make[Unit].from(constructor(_))

Function value with annotated signature:

val constructor: (Int @Id("special"), String @Id("special")) => Unit = (_, _) => ()

make[Unit].from(constructor)

Annotation processing is done by a macro and macros are rarely perfect, Prefer passing an inline lambda such as { x => y } or a method reference such as (method _) or (method(_)) Annotation info may be lost ONLY in a few cases detailed below, though:

  • If an annotated method has been hidden by an intermediate val
  • If an .apply method of a case class is passed when case class _parameters_ are annotated, not their types

As such, prefer annotating parameter types, not parameters: class X(i: Int @Id("special")) { ... }

When binding a case class to constructor, prefer passing new X(_) instead of X.apply _ because apply will not preserve parameter annotations from case class definitions:

case class X(@Id("special") i: Int)

make[X].from(X.apply _) // summons regular Int
make[X].from(new X(_)) // summons special Int

HOWEVER, if you annotate the types of parameters instead of their names, apply WILL work:

case class X(i: Int @Id("special"))

make[X].from(X.apply _) // summons special Int

Using intermediate vals will lose annotations when converting a method into a function value, prefer using annotated method directly as method reference (method _):

def constructorMethod(@Id("special") i: Int): Unit = ()

val constructor = constructorMethod _

make[Unit].from(constructor) // Will summon regular Int, not a "special" Int from DI object graph
See also

com.github.pshirshov.izumi.distage.model.reflection.macros.ProviderMagnetMacro

Linear Supertypes
Serializable, Serializable, Product, Equals, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ProviderMagnet
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. AnyRef
  7. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ProviderMagnet(get: reflection.universe.RuntimeDIUniverse.Provider)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate() @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. val get: reflection.universe.RuntimeDIUniverse.Provider
  8. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  9. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  10. def map[B](f: (R) ⇒ B)(implicit arg0: reflection.universe.RuntimeDIUniverse.Tag[B]): ProviderMagnet[B]
  11. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  13. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  14. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  15. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  16. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  17. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @Deprecated @deprecated @throws( classOf[java.lang.Throwable] )
    Deprecated

    (Since version ) see corresponding Javadoc for more information.

Inherited from Serializable

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped