Я хочу связать определенный класс, давайте назовем его injected
либо его реальной реализацией real
, либо mock
.
Также должны возникать побочные эффекты, и поэтому для инкапсуляции этой работы предпочтительнее использовать функцию.
Выполнение этого вне функции известно. Но это также требует, чтобы побочные эффекты были закодированы несколько раз
Функциональность, которую я ищу, может быть обрисована в общих чертах следующим образом (не работает!)
private def bindMocksOptional(configSettingKey: String, injected: Class[_], real: Class[_] , mock: Class[_]) {
configuration.getOptional[Boolean](configSettingKey) match {
case Some(true) => {
bind(injected).to(mock)
val message = s"Using a mock (${mock.getCanonicalName})for ${injected.getCanonicalName}"
Logger.warn(message)
println(Console.MAGENTA + message)
}
case _ => bind(injected).to(real)
}
}
Функция должна принимать выделенные типы в качестве параметров, искать некоторые параметры конфигурации и основываться на этих привязках либо к фиктивной, либо к реальной реализации.