Почему при создании объекта класса необходимо указывать вводимые аргументы? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть сомнения, связанные с внедрением зависимостей с помощью Google Guice.

У меня есть черта, в которой реализовано несколько методов

trait ATrait {
    def someMethodA(parameters: ArgType) = {
     //code
    }

    def someMethodB(parameters: ArgType) = {
     //code
    }
}    
object A extends ATrait

Теперь у меня есть класс B, где мне нужны методыАтрэйт.Поэтому я ввел его.

class B @Inject(a: ATrait) {
  //code
}

Я также дал привязку в классе модуля Guice.

class GuiceModule extends AbstractModule {
  override def configure(): Unit = {
    bind[ATrait].toInstance(A)
  }
}

Теперь, когда я создаю объект класса B,

val b = new B()

Это не позволит мне сделать это, поэтому мой вопрос, должен ли я вручную пройти объект ATrait.Какая польза от Google Guice Injection?

Возможно, я сделал какую-то ошибку, потому что я учусь этому.Пожалуйста, наведите меня, если я что-то не правильно понял.

Заранее спасибо.

1 Ответ

0 голосов
/ 15 сентября 2018

Guice не работает таким образом.Если вы хотите новый корневой объект, вам нужно запросить у Guice новый экземпляр.

val injector = Guice.createInjector(new GuiceModule())

val a:ATrait = injector.getInstance(classOf[ATrait])
...