Scaldi: не удалось найти привязки, определенные в конфигурации typesafe.

Вот в чем проблема. Предположим, у меня есть два изменяемых модуля:

class DbModule extends Module {   bind[JdbcBackend#Database] toProvider
    inject[JdbcDriver].backend.Database.forURL(
      inject[String]("db.url"),
      inject[String]("db.username"),
      inject[String]("db.password"), null,
      inject[String]("db.driver")
    ) }

и вот соответствующий конфиг:

ресурсы/application.conf:

db {  url="postgres url"  username="db_user"  password="db_password"  driver="cc"  }

Где-то в коде я делаю:

implicit val inj = TypesafeConfigInjector() :: new AppModule

Однако этот инжектор дает следующее исключение:

caldi.InjectException: No binding found with following identifiers:  
* TypeTagIdentifier(String)   * StringIdentifier(db.url)

person Ivan Grebenik    schedule 26.01.2017    source источник


Ответы (1)


Порядок в Scaldi важен: связывание разрешается слева направо.

Оператор ::, как указано в документации, объединяет два инжектора, инвертируя операнды. Таким образом, в вашем случае сначала разрешается AppModule, поэтому он не может найти введенные параметры конфигурации.

Чтобы решить вашу проблему, используйте оператор ++, чтобы держать ваши форсунки в порядке.

Я надеюсь, что это полезно.

person Bianca Tesila    schedule 27.02.2017