长袜子皮皮93
稍微改了下代码, 这种情况下, 似乎只有使用 Provide 了
trait Db
class MemoryDb extends Db
@Singleton
class DatabaseActor @Inject() (@Name("MemoryDb") db: Db) extend Actor {
// ......
}
// 这里还是使用的 bind 来绑定注入
class DbClient @Inject() (@Name("DbActor") actorRef: ActorRef)
// ActorSystem 可以由启动类中来实例化
class MyModule(system: ActorSystem) extends AbstractModule with ScalaModule { bind[Db].annotatedWith(Names.named("MemoryDb")).to[MemoryDb]
@Provides
@Named("DbActor")
// 这里的参数 Db 只有靠 Provide 的绑定传递了.
def dbActorRef(db: Db): ActorRef = {
system.actorOf(Props.create(classOf[DbActor], db))
}
}