Я пытаюсь заменить Dagger 2 на Коин в моем текущем проекте, и я не хочу переписывать некоторые классы в Kotlin, чтобы использовать его.
Можно ли вводить с помощью Koin в классы Java?
В Котлине просто
// Inject MyPresenter
val presenter : MyPresenter by inject()
Спасибо
Да, они работают. Но я хотел бы знать, как я могу получить доступ к инъекциям с помощью фреймворка Koin.
Это может вам помочь ... github.com/Ekito/koin/issues/81
Отлично, @keshavAggarwal Это то, что мне нужно gist.github.com/fredy-mederos/b74e8c2f2ca2f0f5d5910bcb694cbd bf
Эй, твоя проблема решена?




Класс или файл могут иметь расширение .kt, обозначающее Kotlin, или расширение .java, обозначающее Java. Вы не можете написать файл или класс на обоих языках одновременно.
Но ваши файлы Java и Kotlin могут взаимодействовать друг с другом, то есть вы можете использовать класс Java с переменной и обращаться к этой переменной в вашем файле Kotlin или наоборот.
Таким образом, вы можете вставить ссылку на класс Kotlin и использовать ее в своем классе Java и наоборот.
Это может помочь: https://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html
Надеюсь, это развеивает сомнения.
Да, это возможно. Просто синхронизируйте проект с этим файлом gradle
implementation "org.koin:koin-java:$koin_version"
В вашем классе Java
// Inject MyPresenter
replace //val presenter : MyPresenter by inject()
with private Lazy<MyPresenter> presenter = inject(MyPresenter.class);
и получить метод презентатора внутри класса Java, например
presenter.getValue().sayHello()
Привет, @pawan soni, не могли бы вы уточнить, какой импорт вы используете для inject и Lazy? это import static org.koin.core.KoinComponentKt.inject; и import kotlin.Lazy;?
kotlin.Lazy и org.koin.java.KoinJavaComponent.inject
Согласно странице Коина на GitHub: // Koin for Java developers is now part of core, поэтому нет необходимости добавлять какие-либо дополнительные реализации в файл оценок.
Убедитесь, что вы импортируете в gradle коин для библиотеки java и используете приведенные выше ответы.
Gradle:
implementation "org.koin:koin-java:2.0.1"
у меня работал следующий код без org.koin: koin-java: $ koin_version dependency:
private MyPresenter presenter = org.koin.java.KoinJavaComponentKoinJavaComponent.inject(MyPresenter.class).getValue();
Вам больше не нужна дополнительная зависимость 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));
Я почти уверен, что это возможно. И Java, и Kotlin работают на JVM и, следовательно, должны быть совместимы.