共计 2264 个字符,预计需要花费 6 分钟才能阅读完成。
提醒:本文最后更新于2023-05-27 19:06,文中所关联的信息可能已发生改变,请知悉!
https://start.insert-koin.io/#/quickstart/android-java
开始
Koin in 5 minutes (5分钟快速入手Koin)
Getting Started (开始)
这个教程将会告诉你如何使用Koin注入和检索组件来编写一个Android Java application。
可以直接在Github上查看项目或者下载zip
🚀 Go to Github or download Zip
通过如下方式添加 Koin Android 的依赖:
1 2 3 4 5 6 7
8
|
repositories { jcenter() } dependencies { compile "org.koin:koin-android:$koin_version" }
|
让我们创建一个 HelloRepository 来提供一些数据:
1 2 3 4 5 6 7
|
interface HelloRepository { fun giveHello(): String }
class HelloRepositoryImpl() : HelloRepository { override fun giveHello() = "Hello Koin" }
|
让我们创建一个Java presenter类,来消费这些数据:
1 2 3 4 5 6 7
8
9 10 11 12 13 14 15
|
public class MyJavaPresenter {
private HelloRepository repository;
public MyJavaPresenter(HelloRepository repository) { this.repository = repository; }
public String sayHello(){ String hello = repository.giveHello();
return hello+" from "+this; }
}
|
使用 module 函数来声明一个module。让我们来声明我们的第一个组件:
1 2 3 4 5 6 7
8
|
val appModule = module {
single<HelloRepository> { HelloRepositoryImpl() }
factory { MyJavaPresenter(get()) } }
|
我们将 MyJavaPresenter 类声明成 factory 来让每当我们的Activity需要一个时就创建一个新的对象。
现在我们已经有了一个module,我们就可以使用Koin了。打开你的Application类,或者创建一个(不要忘了在你的Manifest.xml中声明它)。然后只需要调用 startKoin() 函数:
1 2 3 4 5 6 7
8
9 10 11
|
class MyApplication extends Application {
@Override public void onCreate() { super.onCreate(); KoinApplication koin = KoinAndroidApplication.create(this) .modules(appModule); startKoin(new GlobalContext(), koin); } }
|
MyJavaPresenter 组件将会被通过 HelloRepository 实例所创建。为了在我们的Activity中获取到它,就需要使用 by inject() 委托注入器来注入它:
1 2 3 4 5 6 7
8
9 10 11 12 13 14 15 16
|
import static org.koin.java.standalone.KoinJavaComponent.inject;
public class JavaActivity extends AppCompatActivity {
private Lazy<MySimplePresenter> presenter = inject(MySimplePresenter.class); private Lazy<MyJavaPresenter> javaPresenter = inject(MyJavaPresenter.class);
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple);
} }
|
by inject() 函数允许我们在Android组件(Activity, fragment, Service…)运行时再来检索Koin实例。
get() 函数在这可以非延迟的直接检索一个实例。