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)
Mic*_*ick 13
您不再需要额外的依赖项,因为它现在是&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));
Run Code Online (Sandbox Code Playgroud)
类或文件可以具有 .kt 扩展名(表示 Kotlin),或者具有 .java 扩展名(表示 Java)。您不能同时用两种语言编写文件或类。
但是您的 Java 和 Kotlin 文件可以相互通信,即您可以使用带有变量的 Java 类并在 Kotlin 文件中访问该变量,反之亦然。
因此,您可以注入 Kotlin 类引用并在 Java 类中使用它,反之亦然。
这可能会有所帮助:https://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html
我希望这能消除疑虑。