Внедрение DynamoDbMapper с помощью Dagger - AwsMobileClient - PullRequest
0 голосов
/ 28 мая 2018

Я изо всех сил пытаюсь найти способ использовать кинжал для внедрения картографа 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

Не уверен, что я поступаю неправильно, и все примеры не используют внедрение зависимостей, поэтому не могут украсть идеи оттуда,

...