Skip to content

服务发现的多实现的使用

xiaojinzi123 edited this page May 31, 2021 · 1 revision

之前的服务发现功能介绍了基础的使用. 这里再介绍一下服务发现多实现的功能.

比如我们有一个接口:

interface BillingService {
  	// 是否是会员
  	fun isPro(): Boolean
    // ......
}

假设我们的 app 支持海外和国内. 海外可能使用的是 Google Play 的订阅. 国内假设使用华为之类的.

那么我们的同一个业务接口可能就有多个实现.

现在 Component 支持多实现啦.

// 海外的支付实现
@ServiceAnno(BillingService::class, name="gp")
class GPBillingServiceImpl: BillingService {
  	// 进行实现
}
// 华为的支付实现
@ServiceAnno(BillingService::class, name="hw")
class HWBillingServiceImpl: BillingService {
  	// 进行实现
}

// 进行获取:
// 1. 获取海外的支付实现:
val billingService = ServiceManager.get(BillingService::class, "gp")
// 2. 获取华为的支付实现:
val billingService = ServiceManager.get(BillingService::class, "hw")

// 如果两者有哪个就获取哪个. 
val billingService = listOf("gp", "hw")
          .mapNotNull { name ->
            ServiceManager.get(BillingService::class.java, name)
          }
Clone this wiki locally