Actually it is working now :)
import play.api.Play.current
import play.api.libs.concurrent.Akka
trait ActorsModule {
lazy val actorSystem = Akka.system
}
this module is fine. The problem was here
object Global extends GlobalSettings with Macwire {
val wired = wiredInModule(Application)
override def getControllerInstanceA = wired.lookupSingleOrThrow(controllerClass)
}
I made wired
lazy and all goes fine :)
import play.api.Play.current
import play.api.libs.concurrent.Akka
trait ActorsModule {
lazy val actorSystem = Akka.system
lazy val dbPoolActor = actorSystem.actorOf(Props(wire[DBPoolActor])).taggedWith[DBPoolActor]
}
class PostgreDatabase(dBPoolActor: ActorRef @@ DBPoolActor) extends Database { ...
}
trait DatabaseModule {
lazy val database: Database = ???
}
%%
?
%%
, no dedicated build neeeded, see: https://github.com/adamw/macwire/tree/master/examples/scalajs
def strategy1()(implicit staticsContext: StaticsContext, param1: Param1) = wire[Strategy1]
class Strategy1 @Inject() (val service1: Service1, val service2: Service2)(implicit staticsContext: StaticsContext, param1: Param1) { ... }
hello! I am doing some programming with scala on android and I thought about using macwire. Everything works nicely but I got stuck with injecting class which depends on the other one extending module. Example:
class ChatPresenter(chatContractView: ChatContractView) extends ChatContractPresenter { }
trait ChatModule {
import com.softwaremill.macwire._
lazy val presenter: ChatContractPresenter = wire[ChatPresenter]
}
class ChatFragment extends BaseFragment with ChatModule { pesenter. ..... }
So I want to use ChatPresenter in ChatFragment. How can I achieve this ?
trait ChatModule {
import com.softwaremill.macwire._
def presenter(chatContractView: ChatContractView) : ChatContractPresenter = wire[ChatPresenter]
}
class ChatFragment extends BaseFragment
with ChatContractView
with ChatModule {
val chatPresenter = presenter(this)
}