Я использую Playframework 2.4, вот мой код
trait UserRepositoryTrait {
val userRepo:UserRepository
val sessionRepo:SessionRepository
}
class UserRepositoryImpl extends UserRepositoryTrait {
@Inject @Named("userRepo")val userRepo:UserRepository= null
@Inject @Named("sessionRepo") val sessionRepo:SessionRepository = null
}
, а вот класс модуля
class UserDependencyModule extends AbstractModule {
@Override
protected def configure() {
bind(classOf[UserRepository]).annotatedWith(Names.named("userRepo")).toInstance(new UserRepo)
bind(classOf[SessionRepository]).annotatedWith(Names.named("sessionRepo")).toInstance(new SessionRepo)
bind(classOf[UserRepositoryTrait]).to(classOf[UserRepositoryImpl])
}
}
в application.conf
play.modules.enabled += "models.guice.UserDependencyModule"
все работаетхорошо, если я внедряю эту черту в контроллер, но я хочу внедрить эту черту в класс, вот код
class StatusChange @Inject() (userRepository:UserRepositoryTrait) {
}
, и мне нужно вызвать StatusChange.scala
в Service.scala
классе, как я могу создать экземпляр StatusChange.scala
объект
class ArtworkService() {
val status= new StatusChange(//what should i add here?)
}
я читал о провайдерах, но я не могу понять, как я могу использовать его для моего сценария? Пожалуйста, сообщите мне
обновить , если ясделать это так будет правильно?
class ArtworkService @inject (userRepository: UserRepositoryTrait) {
val status= new StatusChange(userRepository)
}
и в контроллере
class MyController @inject (userRepository: UserRepositoryTrait)
{
val artworkService = new ArtworkService(userRepository)
}