12

我正在尝试在我当前的项目中将 Dagger 2 替换为Koin,并且我不想在 Kotlin 中重写一些类来使用它。

是否可以在 Java 类中注入 Koin?

在 Kotlin 中只是

// Inject MyPresenter
val presenter : MyPresenter by inject()

谢谢

4

6 回答 6

20

对的,这是可能的。只需将项目与此 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() 
于 2019-09-02T14:52:56.943 回答
4

您不再需要额外的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));

Koin Android Java 文档

于 2021-04-07T12:51:18.257 回答
2

类或文件可以具有 .kt 扩展名意味着 Kotlin,或者具有 .java 扩展名意味着 Java。您不能同时用两种语言编写文件或类。

但是您的 Java 和 Kotlin 文件可以相互通信,即您可以使用带有变量的 Java 类并在您的 Kotlin 文件中访问该变量,反之亦然。

所以你可以注入一个 Kotlin 类引用并在你的 Java 类中使用它,反之亦然。

这可能会有所帮助:https ://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html

我希望这能消除疑虑。

于 2018-06-03T17:12:00.743 回答
1

是的,请确保您在 gradle 中导入 koin for java 库并使用上述答案。

摇篮:

implementation "org.koin:koin-java:2.0.1"
于 2019-11-20T12:44:40.153 回答
0

利用

// 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。请使用以下模块检查您的配置。

在此处查看官方文档

好好工作!

于 2022-01-25T13:27:17.983 回答
0

以下代码在没有org.koin:koin-java:$koin_version 依赖的情况下对我有用:

private MyPresenter presenter = org.koin.java.KoinJavaComponentKoinJavaComponent.inject(MyPresenter.class).getValue();
于 2020-11-18T14:31:41.177 回答