Оптимизируйте мой код из @Provides для связывания в моем пакете guice - PullRequest
0 голосов
/ 04 ноября 2019

В моем коде, в модуле пакета, я использую привязку, используя @Provides в моем пакете Google Guice для привязки. Это мой рабочий код.

Но я хочу оптимизировать свой код, используя bind вместо @provides. Я пробовал разные способы, но получал разные исключения. Может кто-нибудь предложить мне решение? Спасибо

    @Provides
    @Singleton
    @Named(MY_CONSTANT)
    public MyObjectRepository myObjectRepository(final DatabaseRepository<ObjectDAO> objectDAODatabaseRepository,
                                                 final DefaultMyObjectDAOTranslator defaultMyObjectDAOTranslator) {
        return new DynamoDBMyRepository(myDAODatabaseRepository, defaultMyDAOTranslator);
    }

    @Provides
    @Singleton
    public DatabaseRepository<MyObjectDAO> myObjectDAODatabaseRepository(final DAOWriter<MyObjectDAO> daoWriter,
                                                                     final DAORetriever<MyObjectDAO> daoRetriever) {
        return new DynamoDBRepository<>(daoWriter, daoRetriever);
    }

    @Provides
    @Singleton
    public DAOWriter daoWriter(final IDynamoDBMapper dynamoDBMapper) {
        return new DAOWriter(dynamoDBMapper);
    }

    @Provides
    @Singleton
    public DAORetriever<MyObjectDAO> myObjectDAORetriever(final IDynamoDBMapper dynamoDBMapper) {
        return new DAORetriever<>(dynamoDBMapper, MyObjectDAO.class);
    }

1 Ответ

0 голосов
/ 05 ноября 2019

Я считаю, что должно работать следующее:

bind(MyObjectRepository.class)
  .annotatedWith(Names.named(MY_CONSTANT))
  .to(DynamoDBMyRepository.class)
  .in(Singleton.class);

bind(new TypeLiteral<DatabaseRepository<MyObjectDAO>>(){})
  .to(DynamoDBRepository.class)
  .in(Singleton.class);

bind(new TypeLiteral<DAOWriter<MyObjectDAO>>(){})
  .to(DAOWriter.class)
  .in(Singleton.class);

bind(new TypeLiteral<DAORetriever<MyObjectDAO>>(){})
  .to(DAORetriever.class)
  .in(Singleton.class);

Из-за большого количества классов / файлов я не проверял это. Кроме того, в какой-то момент вы пишете, что DAOWriter является родовым, а в другой момент вы пропускаете эту общую спецификацию, поэтому для согласованности я сохранил эту общую часть.

...