scala:如何在guice模块中注入

问题描述 投票:0回答:1

我是新来的人,这是我的代码

    trait MyRepository {

    }

    class MyRepositoryImp extends MyRepository {

    }

    trait MyService {
    }



    class MyServiceImp @Inject()(myRepository:MyRepository) extends MyService {
}

    class Demo @Inject(myService:MyService) {

    }

class RepositoryModule extends AbstractModule {

override protected def configure(): Unit = {
    bind(classOf[MyRepository]).toInstance(new MyRepositoryImpl)

  }
}

class ServiceModule extends AbstractModule {

override protected def configure(): Unit = {
    bind(classOf[MyService]).toInstance(new MyService(//what should i pass in here?))

  }
}

我的问题在ServiceModule中,我如何在MyService构造函数中传递注入的MyRepository参数

scala guice
1个回答
0
投票

尝试使用@Provides批注

import com.google.inject.{AbstractModule, Guice, Inject, Injector, Provides}
import scala.jdk.CollectionConverters._

trait MyRepository {}
class MyRepositoryImp extends MyRepository {}
trait MyService {}
class MyServiceImp @Inject() (myRepository: MyRepository) extends MyService {}
class Demo @Inject() (myService: MyService) { println("Woohoo, I am wired!") }

class Module extends AbstractModule {
  @Provides def repository: MyRepository = new MyRepositoryImp
  @Provides def service(repo: MyRepository): MyService = new MyServiceImp(repo)
  @Provides def demo(service: MyService): Demo = new Demo(service)
}

object guiceExample extends App {
  val injector: Injector = Guice.createInjector(List(new Module).asJava)
  val demo = injector.getInstance(classOf[Demo])
}

输出Woohoo, I am wired!

© www.soinside.com 2019 - 2024. All rights reserved.