从@Provides优化我的代码以绑定到我的guice包中

在我的代码中,在模块包中,我使用Google guice包中的@Provides进行绑定。这是我的工作代码。

但是我想使用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);
    }
zhang9987 回答:从@Provides优化我的代码以绑定到我的guice包中

我认为以下应该有效:

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是通用的,而有时您会跳过该通用规范,因此为了保持一致,我保留了该通用部分。

本文链接:https://www.f2er.com/3165664.html

大家都在问