我有两个界面:UserService
和ProjectService
。它们中的每一个都有一个特定的实现类,分别名为UserServiceImpl
和ProjectServiceImpl
。还有一个WorkflowManagementService
类,它实现了上述两个接口,并作为其具体实现的代理。它还可以做更多的事情。
WorkflowManagementService
会注入具体的UserService
和ProjectService
个实例。但是,对于应用程序的其余部分,只要有人需要UserSerivce
或ProjectService
个实例,就应该提供WorkflowManagementService
。
如何将注入器提供UserServiceImpl
和ProjectServiceImpl(如果要在WorkflowManagementService
注入,WorkflowManagementService
用于任何其他引用?
答案 0 :(得分:1)
我不知道如何根据类上下文执行此操作,但您可以使用绑定注释执行此操作:
public class Example {
static interface UserService {}
static interface ProjectService {}
static class UserServiceImpl implements UserService {}
static class ProjectServiceImpl implements ProjectService {}
static class WorkflowManagementService implements UserService, ProjectService {
@Inject
@Named("concrete")
UserService userService;
@Inject
@Named("concrete")
ProjectService projectService;
}
static class Module extends AbstractModule {
@Override
protected void configure() {
bind(UserService.class).to(WorkflowManagementService.class);
bind(ProjectService.class).to(WorkflowManagementService.class);
bind(UserService.class).annotatedWith(Names.named("concrete")).to(UserServiceImpl.class);
bind(ProjectService.class).annotatedWith(Names.named("concrete")).to(ProjectServiceImpl.class);
}
}
}
在完成代码原型设计后,您可能希望使用实际注释而不是@Named
。