2017-01-26 11 views
0

Вот и проблема. Пусть Предположим, у меня есть два изменяемых модулей:Scaldi: не удалось найти привязки, определенные в config-конфигурациях

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) 

ответ

1

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

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

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

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