0

我有两个接口:UserServiceProjectService. 它们中的每一个都有一个特定的实现类,分别命名为UserServiceImplProjectServiceImpl。还有一个WorkflowManagementService类,它实现了上述两个接口,并作为它们具体实现的代理。它还在上面做了更多的事情。

WorkflowManagementService注入具体UserServiceProjectService实例。但是,对于应用程序的其余部分,只要有人需要 aUserSerivceProjectService实例,WorkflowManagementService就应该提供 a。

我怎样才能使注入器提供UserServiceImpl和 ProjectServiceImpl,如果它们要被注入WorkflowManagementService,以及WorkflowManagementService任何其他参考?

4

1 回答 1

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在完成代码原型之后。

于 2013-07-23T15:18:09.227 回答