栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Koin简单使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Koin简单使用

Koin是什么?为什么要用Koin?

Koin 是一个注入框架无需反射/代理 即可方便使用对象去调用某个类对象从而使用类对象里边的方法。

我也不懂,这里只是教大家怎么是实践使用Koin,只因项目上使用到了不得已而为之

Koin 来源于一位开源作者

Inside Koin 3.2 - Optimizing your Modules with Includes

其木的是为了在Kotlin中方便快捷进行注入,在这之前有另一个开源注解Degger2这里就不做描述了,有需要的自行百度

使用方法分几步:

首先1.你要注入的对象是什么,也就是你将要使用的类

这里以 

LoginPresenter 为例

 

class LoginPresenter(val login: LoginModel) {

    fun login():Boolen{
        return login.do()
    }

}
2.LoginPresenter 所需要的参数类 LoginModel

  

interface LoginModel{
    fun do(): Boolean
}

class LoginModelImpl : LoginModel{

    override fun do(): Boolean {
        // to do login ... 这里省略了一些去登陆的逻辑
        return true
    }
}

3.新建一个类 AppMoudle  将需要注入的类 使用Koin的model进行注册

package com.nova.di

import com.nova.koin.HelloRepository
import com.nova.koin.HelloRepositoryImpl
import com.nova.koin.MySimplePresenter
import org.koin.dsl.module



val appModule = module {
    // single 表示单例
    single { LoginModelImpl() }
   // factory 表示工厂  get()  表示自动带入上边注册的参数
    factory { LoginPresenter(get()) }
}

4.在Application处开始注入对象

class MyApplication : Application() {
   
    override fun onCreate() {
        super.onCreate()

        startKoin {
            // Level.NONE
            androidLogger()
            androidContext(this@MyApplication)
            modules(appModule)
        }

    }
}

5.在调用的页面获取注入的对象LoginPresenter

class KoinActivity : AppCompatActivity() {
    private val TAG = "KoinActivity"
    val loginPresenter: LoginPresenter by inject()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_loin)

        if (loginPresenter!= null)
            LogUtil.d(TAG, "${loginPresenter.login()}")
    }

}

这样子完成后运行其实是会报错的,这里有一个坑开始注入的时候使用

androidLogger()  会报错

java.lang.NoSuchMethodError: No virtual method elapsedNow()D in class Lkotlin/time/TimeMark; or its super classes (declaration of 'kotlin.time.TimeMark' appears in /data/app/~~ArLPm6ZwWHpL7fiTI_vDjQ==/com.nova.fraworkproject-QE0TR4fU0SiejzRkgwjc2w==/base.apk)

应该使用如下的设置 *********

androidLogger( Level.NONE)
class MyApplication : Application() {
    private var mActivitRouter: ActivitRouter? = null

    override fun onCreate() {
        super.onCreate()

        startKoin {
            // Level.NONE
            androidLogger( Level.NONE)
            androidContext(this@MyApplication)
            modules(appModule)
        }
    }
}

至于怎么使用就到这里了,如果有帮助到你麻烦点赞加关注,day day up.

 

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号