ModularServiceManager.kt 2.27 KB
Newer Older
1
package com.ydl.ydlcommon.modular
konghaorui committed
2 3 4

import com.alibaba.android.arouter.facade.template.IProvider
import com.alibaba.android.arouter.launcher.ARouter
5
import com.ydl.ydlcommon.utils.LogUtil
konghaorui committed
6 7 8 9 10 11


/**
 * Created by haorui on 2019-09-21 .
 * Des:查找 Arouter 服务封装类
 */
12
object ModularServiceManager {
konghaorui committed
13 14 15

    private val routerMap: HashMap<String, IProvider> = HashMap()

16
    fun getPlatformUserService(): IPlatformUserModuleService? {
konghaorui committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
        return provide(IPlatformUserModuleService::class.java)
    }

    fun <T : IProvider> provide(clz: Class<T>, path: String): T {

        var provider: IProvider? = null
        val simpleName = clz.simpleName;

        if (routerMap[simpleName]!=null){
            return routerMap[simpleName] as T
        }

        try {
            val navigation = ARouter.getInstance()
                .build(path)
                .navigation()

            provider = navigation as IProvider

            routerMap[simpleName] = provider

        } catch (e: Exception) {
            LogUtil.e(e.message)
40
            return throw ServiceNotFoundException("请检查您是否依赖于包含以下内容的模块: $simpleName, path is $path")
konghaorui committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
        }

        return provider as T
    }

    fun <T : IProvider> provide(clz: Class<T>): T {

        var provider: IProvider? = null
        val simpleName = clz.simpleName;
        if (routerMap[simpleName]!=null){
            return routerMap[simpleName] as T
        }
        try {
            provider = ARouter.getInstance().navigation(clz)
            if (provider == null){
56
                LogUtil.e("provide : Service Not Found ")
konghaorui committed
57 58 59
            }
            routerMap[simpleName] = provider
        } catch (e: Exception) {
60 61
            LogUtil.e(e.toString())
            return throw ServiceNotFoundException("请检查您是否依赖于包含以下内容的模块: $simpleName")
konghaorui committed
62 63 64 65
        }

        return provider as T
    }
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

    /**
     * 用以判断是否接入依赖某业务模块
     */
    fun <T : IProvider> isDependByClz(clz: Class<T>): Boolean {
        var provider: IProvider? = null

        try {
            provider = ARouter.getInstance().navigation(clz)
            return provider != null
        } catch (e: Exception) {
            LogUtil.e(e.toString())
        }

        return provider != null
    }
konghaorui committed
82
}