У меня есть класс обслуживания: Service
и его плечи: RedisServiceImpl, DBServiceImpl
.Как правильно привязать несколько реализаций одной и той же службы?
В моем приложении почти каждый класс должен использовать эти два модуля для обновления полей. Я хочу использовать Guice для внедрения этих сервисов.
class ServiceModule extends AbstractModule with ScalaModule {
override def configure(): Unit = {
bind[Service].annotatedWith(Names.named("Redis")).toInstance(new RedisServiceImpl("localhost"))
bind[Service].annotatedWith(Names.named("DB")).toInstance(new DBServiceImpl("some external host"))
}
}
Проблема с этим будет, если когда-либо мы уходим Redis/дб, я должен был бы рыскать по всем классам и заменить "Redis"
/ с новыми именами. Есть ли более простой способ сделать это?
Я попытался создать константы внутри из ServiceModule, но я получил следующее сообщение об ошибке, когда я попытался придать службу в класс:
Error:(18, 34) annotation argument needs to be a constant; found: modules.ServiceModule.x
, @Named(ServiceModule.x) redisService: Service
^
Вот классы я нагнетание в:
class Poller @Inject()(
@Named("PollService") pollService: PollService[List[ChannelSftp#LsEntry]]
, @Named("Redis") redisStatusService: StatusService
, @Named("DB") dynamoDbStatusService: StatusService
) {
... methods ...
}
Если бы я попытался:
class Poller @Inject()(
@Named(ServiceModule.x) pollService: PollService[List[ChannelSftp#LsEntry]]
, @Named("Redis") redisStatusService: StatusService
, @Named("DB") dynamoDbStatusService: StatusService
) {
... methods ...
}
я получаю ошибку я уже упоминал выше.