在 Java 类中注入 Koin

Raf*_*ujo 9 java android service-locator kotlin koin

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

可以在 Java 类中注入 Koin 吗?

在 Kotlin 中只是

// Inject MyPresenter
val presenter : MyPresenter by inject()
Run Code Online (Sandbox Code Playgroud)

谢谢

Paw*_*oni 14

对的,这是可能的。只需将项目与此 gradle 文件同步

implementation "org.koin:koin-java:$koin_version"
Run Code Online (Sandbox Code Playgroud)

在你的java类中

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

   with  private Lazy<MyPresenter> presenter = inject(MyPresenter.class);
Run Code Online (Sandbox Code Playgroud)

并在 Java 类中获取演示者方法,例如

presenter.getValue().sayHello() 
Run Code Online (Sandbox Code Playgroud)

  • 根据 Koin 的 GitHub 页面:“// Java 开发人员的 Koin 现在是核心的一部分”,因此无需在成绩文件中添加任何额外的实现。 (3认同)

Mic*_*ick 13

您不再需要额外的依赖项,因为它现在是&koin-java的一部分。koin-androidkoin-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));
Run Code Online (Sandbox Code Playgroud)

Koin Android Java 文档


kes*_*wal 2

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

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

因此,您可以注入 Kotlin 类引用并在 Java 类中使用它,反之亦然。

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

我希望这能消除疑虑。