【发布时间】:2015-11-25 16:11:44
【问题描述】:
我有服务类: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/db,我将不得不搜索所有类并用新名称替换 "Redis"/"DB"。有没有更简单的方法来做到这一点?
我尝试在 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 ...
}
我收到上面提到的错误。
【问题讨论】:
标签: scala dependency-injection guice