abstract class PluginDef[T] extends PluginBase with ModuleDef
Use it to define Plugins using izumi.distage.model.definition.dsl.ModuleDefDSL syntax
object MyPlugin extends PluginDef { include(myModule[F]) make[Xa[F]].from[Xa.Impl[F]] }
- Note
 Since this is an abstract class, you cannot mix it with other classes or use it as a mixin. Instead, you may inherit from PluginBase, which is a trait – but in that case compile-time checks will not re-run when the class is updated in that case. Alternatively, you may use izumi.distage.model.definition.dsl.IncludesDSL#include to compose modules as values instead of using inheritance.
- See also
 
- Alphabetic
 - By Inheritance
 
- PluginDef
 - ModuleDef
 - ModuleDefDSL
 - TagsDSL
 - IncludesDSL
 - AbstractBindingDefDSL
 - FunctoidBindImplicitsVersionSpecific
 - AbstractBindingDefDSLMacro
 - Module
 - PluginBase
 - ModuleBase
 - CachedHashcode
 - AnyRef
 - Any
 
- Hide All
 - Show All
 
- Public
 - Protected
 
Instance Constructors
-    new PluginDef()(implicit recompilationToken: ForcedRecompilationToken[T])
- recompilationToken
 Makes compile-time checks re-run when the source code of this
PluginDefis changed, if it's used in the checked role.
 
Type Members
-   final  class MutationContext extends AnyRef
Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.
Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.
Example:
import distage.{ClassConstructor, Tag, ModuleDef} import izumi.distage.model.definition.dsl.ModuleDefDSL trait RegisteredComponent class RegisteredComponentImpl extends RegisteredComponent def addAndRegister[T <: RegisteredComponent: Tag: ClassConstructor](implicit mutateModule: ModuleDefDSL#MutationContext): Unit = { new mutateModule.dsl { make[T] many[RegisteredComponent] .weak[T] } } new ModuleDef { addAndRegister[RegisteredComponentImpl] }
- Definition Classes
 - AbstractBindingDefDSL
 
 
Value Members
-   final  def !=(arg0: Any): Boolean
- Definition Classes
 - AnyRef → Any
 
 -   final  def ##: Int
- Definition Classes
 - AnyRef → Any
 
 -   final  def ==(arg0: Any): Boolean
- Definition Classes
 - AnyRef → Any
 
 -    def _initialIncludes: ArrayBuffer[Include]
- Attributes
 - protected
 - Definition Classes
 - IncludesDSL
 
 -    def _initialState: ArrayBuffer[BindingRef]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -    def _initialTags: Set[BindingTag]
- Attributes
 - protected
 - Definition Classes
 - TagsDSL
 
 -   final  def _make[T](provider: Functoid[T])(implicit arg0: Tag[T], pos: CodePositionMaterializer): MakeDSL[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -    def _registered[T <: BindingRef](bindingRef: T): T
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -   final  def addImplicit[T](implicit arg0: Tag[T], instance: T, pos: CodePositionMaterializer): MakeDSLUnnamedAfterFrom[T]
Same as
make[T].fromValue(implicitly[T])*Same as
make[T].fromValue(implicitly[T])*- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -   final  def asInstanceOf[T0]: T0
- Definition Classes
 - Any
 
 -   final  def bindings: Set[Binding]
- Definition Classes
 - ModuleDefDSL
 
 -    def clone(): AnyRef
- Attributes
 - protected[lang]
 - Definition Classes
 - AnyRef
 - Annotations
 - @throws(classOf[java.lang.CloneNotSupportedException]) @native()
 
 -   final  def eq(arg0: AnyRef): Boolean
- Definition Classes
 - AnyRef
 
 -   final  def equals(obj: Any): Boolean
- Definition Classes
 - ModuleBase → AnyRef → Any
 
 -    def finalize(): Unit
- Attributes
 - protected[lang]
 - Definition Classes
 - AnyRef
 - Annotations
 - @throws(classOf[java.lang.Throwable])
 
 -   final  def getClass(): Class[_ <: AnyRef]
- Definition Classes
 - AnyRef → Any
 - Annotations
 - @native()
 
 -   final  def hash: Int
- Attributes
 - protected
 - Definition Classes
 - ModuleBase → CachedHashcode
 
 -   final  lazy val hashCode: Int
- Definition Classes
 - CachedHashcode → AnyRef → Any
 
 -   final  def include(that: ModuleBase, tagMergeStrategy: TagMergePolicy = TagMergePolicy.MergePreferInner): Unit
Add all bindings in
thatmodule intothismoduleAdd all bindings in
thatmodule intothismoduleWILL add outer tags / axis values from TagsDSL#tag to included bindings, unless they're overridden by tags / axis values in the included module.
- Attributes
 - protected
 - Definition Classes
 - IncludesDSL
 
 -   final  def isInstanceOf[T0]: Boolean
- Definition Classes
 - Any
 
 -   final  def iterator: Iterator[Binding]
- Definition Classes
 - ModuleDefDSL
 
 -   final  def keys: Set[DIKey]
- Definition Classes
 - ModuleBase
 
 -   final  def keysIterator: Iterator[DIKey]
- Definition Classes
 - ModuleDefDSL
 
 -   final macro  def make[T]: MakeDSL[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSLMacro
 
 -   final  def makeFactory[T](implicit arg0: Tag[T], arg1: FactoryConstructor[T]): MakeDSLUnnamedAfterFrom[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 - See also
 
 -   final  def makeSubcontext[T](implicit arg0: Tag[T]): SubcontextDSL[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 - See also
 
 -   final  def makeSubcontext[T](submodule: ModuleBase)(implicit arg0: Tag[T]): SubcontextDSL[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 - See also
 
 -   final  def makeTrait[T](implicit arg0: Tag[T], arg1: TraitConstructor[T]): MakeDSLUnnamedAfterFrom[T]
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 - See also
 
 -   final  def many[T](implicit tag: Tag[Set[T]], pos: CodePositionMaterializer): SetDSL[T]
Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.
Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.
To define a multibinding use
.manyand.addmethods in ModuleDef DSL:import cats.effect._, org.http4s._, org.http4s.dsl.io._, scala.concurrent.ExecutionContext.Implicits.global import distage._ object HomeRouteModule extends ModuleDef { many[HttpRoutes[IO]].add { HttpRoutes.of[IO] { case GET -> Root / "home" => Ok(s"Home page!") } } }
Set bindings defined in different modules will be merged together into a single Set. You can summon a created Set by type
Set[T]:import cats.implicits._, org.http4s.server.blaze._, org.http4s.implicits._ object BlogRouteModule extends ModuleDef { many[HttpRoutes[IO]].add { HttpRoutes.of[IO] { case GET -> Root / "blog" / post => Ok("Blog post ``$post''!") } } } class HttpServer(routes: Set[HttpRoutes[IO]]) { val router = routes.foldK def serve = BlazeBuilder[IO] .bindHttp(8080, "localhost") .mountService(router, "/") .start } val objects = Injector().produce(HomeRouteModule ++ BlogRouteModule) val server = objects.get[HttpServer] val testRouter = server.router.orNotFound testRouter.run(Request[IO](uri = uri("/home"))).flatMap(_.as[String]).unsafeRunSync // Home page! testRouter.run(Request[IO](uri = uri("/blog/1"))).flatMap(_.as[String]).unsafeRunSync // Blog post ``1''!
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 - See also
 Guice wiki on Multibindings: https://github.com/google/guice/wiki/Multibindings
 -   final  def modify[T]: ModifyDSL[T, MakeDSL, MakeDSLUnnamedAfterFrom, SetDSL]
Modify a value bound at
T.Modify a value bound at
T. Modifiers stack and are all applied beforeTis added to the object graph; only the final instance is observable.import distage.{Injector, ModuleDef} Injector().produceGet[Int](new ModuleDef { make[Int].from(1) modify[Int](_ + 1) modify[Int](_ + 1) }).use(i => println(s"Got `Int` $i")) // Got `Int` 3
You can also modify while summoning additional dependencies:
modify[Int]("named").by(_.flatAp { (adder: Adder, multiplier: Multiplier) => int: Int => multiplier.multiply(adder.add(int, 1), 10) })
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -   implicit final  lazy val mutationContext: MutationContext
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -   final  def ne(arg0: AnyRef): Boolean
- Definition Classes
 - AnyRef
 
 -   final  def notify(): Unit
- Definition Classes
 - AnyRef
 - Annotations
 - @native()
 
 -   final  def notifyAll(): Unit
- Definition Classes
 - AnyRef
 - Annotations
 - @native()
 
 -   final  def synchronized[T0](arg0: => T0): T0
- Definition Classes
 - AnyRef
 
 -   final  def tag(tags: BindingTag*): Unit
Add
tagsto all bindings in this module, except for included bindingsAdd
tagsto all bindings in this module, except for included bindings- Attributes
 - protected
 - Definition Classes
 - TagsDSL
 
 -   final  def toString(): String
- Definition Classes
 - ModuleBase → AnyRef → Any
 
 -   final  def todo[T](implicit arg0: Tag[T], pos: CodePositionMaterializer): MakeDSLUnnamedAfterFrom[T]
Create a dummy binding that throws an exception with an error message when it's created.
Create a dummy binding that throws an exception with an error message when it's created.
Useful for prototyping.
- Attributes
 - protected
 - Definition Classes
 - AbstractBindingDefDSL
 
 -   final  def wait(): Unit
- Definition Classes
 - AnyRef
 - Annotations
 - @throws(classOf[java.lang.InterruptedException])
 
 -   final  def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
 - AnyRef
 - Annotations
 - @throws(classOf[java.lang.InterruptedException])
 
 -   final  def wait(arg0: Long): Unit
- Definition Classes
 - AnyRef
 - Annotations
 - @throws(classOf[java.lang.InterruptedException]) @native()
 
 
Deprecated Value Members
-   final  def includeApplyTags(that: ModuleBase): Unit
- Attributes
 - protected
 - Definition Classes
 - IncludesDSL
 - Annotations
 - @deprecated
 - Deprecated
 (Since version 1.2.9) Outer module's tags are now added to included module by default, use regular
include