BillingClient и BillingClientWrapper — циклическое внедрение зависимостей ⇐ 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, и это вряд ли идеально.
Как мне решить эту проблему?
У меня есть ситуация, когда моему 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, и это вряд ли идеально.
Как мне решить эту проблему?
Мобильная версия