BillingClient и BillingClientWrapper — циклическое внедрение зависимостейAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 BillingClient и BillingClientWrapper — циклическое внедрение зависимостей

Сообщение Гость »


У меня есть ситуация, когда моему BillingDataSource, также известному как BillingClientWrapper, нужен одноэлементный объект BillingClient, но создается BillingClient объект не может быть завершен без прослушивателя, который находится в BillingDataSource:

class BillingDataSource(частный клиент val: BillingClient) { Private val _purchases = MutableStateFlow(mutableListOf()) вал покупок = _purchases.asStateFlow() val PURCHASES_UPDATED_LISTENER = PurchasesUpdatedListener { результат, покупки -> _purchases.value = покупки } } И внедрение зависимостей:

@Provides @Синглтон весело предоставитьBillingClient( Контекст @ApplicationContext: Контекст, оболочка: BillingDataSource ) : БиллингКлиент { вернуть BillingClient.newBuilder(контекст) .setListener(обертка.PURCHASES_UPDATED_LISTENER) .enablePendingPurchases() .строить() } @Обеспечивает @Синглтон весело предоставитьBillingDataSource( клиент: БиллингКлиент ) : BillingDataSource = BillingDataSource(клиент) Требование .setListener при создании BillingClient оказывается настоящей головной болью. Конечно, я могу разорвать циклическую зависимость, поместив прослушиватель за пределы BillingDataSource, но тогда я потеряю доступ к членам (например, _purchases) внутри BillingDataSource, и это вряд ли идеально.

Как мне решить эту проблему?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»