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