使用Dagger注入DynamoDbMapper - AwsMobileClient

时间:2018-05-28 11:23:39

标签: android amazon-dynamodb dagger-2 aws-mobilehub

我正在努力寻找一种方法来使用匕首将DynamoDB映射器注入我的存储库。

我使用的AwsMobileClient需要在我的主要活动中初始化"像这样:

    AWSMobileClient.getInstance().initialize(application) {
        Timber.d("AWSMobileClient is initialized")
    }.execute()

目前,我在我的资源库中创建了一个内联映射器,如下所示:

    val credentials = AWSMobileClient.getInstance().credentialsProvider
    val config = AWSMobileClient.getInstance().configuration
    val ddbClient = AmazonDynamoDBClient(credentials)
    ddbClient.setRegion(Region.getRegion(Regions.EU_WEST_2))
    val mapper = DynamoDBMapper.builder()
            .awsConfiguration(config)
            .dynamoDBClient(ddbClient)
            .build()

如果我把它移到匕首模块,它看起来像这样:

@Singleton
@Provides
AmazonDynamoDBClient provideDynamoDbClient() {
    return new AmazonDynamoDBClient(AWSMobileClient.getInstance().getCredentialsProvider());
}

@Singleton
@Provides
DynamoDBMapper provideDynamoDBMapper(AmazonDynamoDBClient ddbClient) {
    return DynamoDBMapper.builder()
            .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
            .dynamoDBClient(ddbClient)
            .build();
}

然而,这会导致崩溃和灼伤,因为匕首尝试在AwsMobileClient完成初始化之前创建对象,并且在尝试创建DynamoDBClient

时凭据提供程序为空

不确定我是否以错误的方式解决这个问题并且所有样本都没有使用依赖注入,因此无法从那里窃取想法。

0 个答案:

没有答案