我正在尝试在我当前的项目中将 Dagger 2 替换为Koin,并且我不想在 Kotlin 中重写一些类来使用它。
是否可以在 Java 类中注入 Koin?
在 Kotlin 中只是
// Inject MyPresenter
val presenter : MyPresenter by inject()
谢谢
对的,这是可能的。只需将项目与此 gradle 文件同步
implementation "org.koin:koin-java:$koin_version"
在你的java类中替换
// Inject MyPresenter
private val presenter : MyPresenter by inject()
和
private Lazy<MyPresenter> presenter = inject(MyPresenter.class);
并在 Java 类中获取演示者方法,例如
presenter.getValue().sayHello()
您不再需要额外的koin-java
依赖,因为它现在是koin-android
&的一部分koin-core
。
// Imports
import static org.koin.java.KoinJavaComponent.get;
import static org.koin.java.KoinJavaComponent.inject;
import static org.koin.core.qualifier.QualifierKt.named;
import static org.koin.core.parameter.DefinitionParametersKt.parametersOf;
// Lazy injection
Lazy<MyDependency> dependency = inject(MyDependency.class);
// Eager injection
MyDependency dependency = get(MyDependency.class);
// Named injection
get(MyDependency.class, named("MyNamedDependency"));
// Parameter injection
get(MyDependency.class, null, () -> parametersOf(this));
类或文件可以具有 .kt 扩展名意味着 Kotlin,或者具有 .java 扩展名意味着 Java。您不能同时用两种语言编写文件或类。
但是您的 Java 和 Kotlin 文件可以相互通信,即您可以使用带有变量的 Java 类并在您的 Kotlin 文件中访问该变量,反之亦然。
所以你可以注入一个 Kotlin 类引用并在你的 Java 类中使用它,反之亦然。
这可能会有所帮助:https ://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html
我希望这能消除疑虑。
是的,请确保您在 gradle 中导入 koin for java 库并使用上述答案。
摇篮:
implementation "org.koin:koin-java:2.0.1"
利用
// Java Compatibility
implementation "io.insert-koin:koin-android-compat:$koin_version"
反而
implementation "org.koin:koin-java:$koin_version"
不要忘记
// Add Maven Central to your repositories if needed
repositories {
mavenCentral()
}
重点
由于 Jcenter 关闭,koin 项目的 maven 组 id 以前是 org.koin,现在是 io.insert-koin。请使用以下模块检查您的配置。
在此处查看官方文档
好好工作!
以下代码在没有org.koin:koin-java:$koin_version 依赖的情况下对我有用:
private MyPresenter presenter = org.koin.java.KoinJavaComponentKoinJavaComponent.inject(MyPresenter.class).getValue();