我当前的安卓应用程序在DI上采用了Koin
def koin_version = '2.0.1'
api "org.koin:koin-androidx-scope:$koin_version"
api "org.koin:koin-androidx-viewmodel:$koin_version"
api "org.koin:koin-androidx-ext:$koin_version"
androidTestImplementation "org.koin:koin-test:$koin_version"
我有一个片段,它基本上只包含一个底部导航和一个视图模型。此视图模型由此片段中的所有子片段共享。我的parentfragment看起来有点像这样:
class UserDetailFragment : Fragment() {
private val args: UserDetailFragmentArgs by navArgs()
private val userDetailViewModel: UserDetailViewModel by viewModel { parametersOf(args.user) }
//standard code
//onC
我以前使用过koin,用koin注射viewModel是一种单一的内衬。我要知道没有它该怎么做!我们应该在ViewModelFactory中为不同的视图模型使用一个大的ViewModelFactory吗?
class ViewModelFactory: ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return when(modelClass) {
is FirstViewModel -
最近我用发布了一个库;当我在自己的应用程序中使用这个库时,一切都没问题,因为我没有在应用程序中使用Koin,但是如果我在应用程序和库中同时使用startKoin,应用程序就会崩溃!
在应用程序和库中有使用koin的方法吗?如何在我的库中调用startKoin,而不用面对使用koin和调用startKoin的应用程序中的任何问题
org.koin.core.error.KoinAppAlreadyStartedException: A Koin Application has already been started
我想在我的应用程序中使用Jetpack撰写。我已经在用Koin做DI了。因为我的BaseFragment中有很多方便的方法,所以我想继承它,用compose构建相应的视图。
现在的问题是,当在BaseFragment中使用DI并从DI继承时,将不会显示可组合的预览,并出现以下错误消息:
并引发以下异常:
java.lang.IllegalStateException: KoinApplication has not been started
at org.koin.core.context.GlobalContext.get(GlobalContext.kt:36)
我有一个简单的片段和视图模型,我希望在片段中使用它,但是它一直抛出以下错误: Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.me.ui.MovieListViewModel'. Check your definitions! THe视图模型可以很好地加载到activity类上,但不能加载到片段上。 下面的片段代码 class TopMoviesFragment : BaseFragment() {
private val movi
我有一个打包并发布的Android库模块。它依赖于不同的应用程序,有些使用Koin,有些不使用,因此我想使用Koin的。
阅读完文档后,我添加了一个koin组件和上下文,如下所示:
internal object LocalKoinContext {
lateinit var koinApplication: KoinApplication
}
// Custom KoinComponent using the local instance & not the Global context
interface CustomKoinComponent : KoinCompone
我使用的是Koin 3.0.0-alpha-4版本,当我试图通过koin使用注入类时,它会抛出iOS端的异常:KotlinException=kotlin.IllegalStateException: Must be main thread, KotlinExceptionOrigin有一个单例类,在这里我使用koin初始化对象:
@ThreadLocal
object ObjectFactory : KoinComponent{
val appStateRepository: AppStateRepository by inject()
val appStateRepositoryD
您好,我刚刚学习Koin,在KOIN2.0中如何提供这个Dagger2类? @Singleton
open class AppExecutors(private val diskIO: Executor, private val networkIO: Executor, private val mainThread: Executor) {
@Inject
constructor() : this(
Executors.newSingleThreadExecutor(),
Executors.newFixedThreadPoo
koin测试结果如下:
org.koin.core.error.NoBeanDefFoundException: No definition found for '<class_name>' has been found. Check your module definitions.
类EmailValidatorUtilImpl实现得很好,
import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.koin.core
我在我的应用程序中使用了Koin DI,一切工作正常。我注入了viewModels,没有任何问题。 例如,我有一个带函数的calcViewModel: class CalcViewModel(): ViewModel() {
fun calculateNumber(): Int{
var a = 5 + 3
return a
}
} 在应用程序中,我这样使用它: class Application : Application() {
override fun onCreate() {
super.onCreate()
我有一个名为CrmRepository的接口,我从它实现了两个类SuiteCrmRepository和OneCrmRepository,它们是我的应用程序的数据源。
每当用户使用不同的帐户登录时,我都想动态地交换依赖项(数据源)。
我使用Koin将存储库注入构造函数中的视图模型:
class ModuleViewModel(private var crmRepo: CrmRepository) :ViewModel() {}
并在koin中声明模块如下:
fun provideCrmRepository(
): CrmRepository {
return if (crmType ==
当我的应用程序启动时,我使用一些数据创建对象,并希望在服务/视图模型之间共享相同的对象实例。
是否可以使用Koin将相同的数据类实例注入viewModel?
编辑:我创建用户对象在MainViewModel时,应用程序加载数据从火基地在开始。
@IgnoreExtraProperties
@Keep
data class User(
val id: String = "",
val name: String? = null,
val surname: String? = null,
val email: String? = null,
v
例如,我有以下几个类:
abstract class BaseClass()
class SpecificClass : BaseClass()
现在,我想通过koin依赖注入提供SpecificClass,但我也想在同一个图中提供基类BaseClass。
为了清楚起见,我想做一些类似的事情:
class Someclass {
...
private specificClass: SpecificClass by inject()
...
}
class Someclass {
...
private baseClass: BaseClass by
我正试图设置一个工作经理来做一些工作,并且我在初始化它时遇到了困难。我正在使用KOIN工作狂dsl
implementation "org.koin:koin-androidx-workmanager:2.2.0-rc-4"
我的工人阶级是这样的
class NotificationsScheduler(
private val dispatchers: AppCoroutineDispatchers,
private val getTaskUseCase: GetTaskUseCase,
private val context: Context,
我有一台ViewModel。它调用我的数据存储库中的一个函数,并返回狗对象的列表。
class MainViewModel() : ViewModel() {
private val dataRepo: DataRepo by inject(DataRepo::class.java) //dataRepo
private var limit = 10
private val _dogListLiveData = MutableLiveData<List<Dog>>()
private var dogList = mutableListOf
在我的模块中,我有两种型号,一种是书,一种是房间。在房间里我会保留房间的细节。在书中我会保留房间的预订细节。我在图书模型中有一个与房间模型相关的many2one字段。当我保存图书记录时,在many2one字段附近会出现一个重定向按钮。点击这个按钮,它将打开房间模型的表单视图。我想使第二个表单视图成为只读的。我怎么能做到呢?我试着只为房间模型保留读取权限,然后我无法保存图书模型的记录。所以我怎样才能完成
class room(models.Model):
_name = 'room'
name = fields.Char('room name')
因此,我使用Koin进行依赖注入,下面是我在一个活动中所做的
class ModuleDetailActivity : AppCompatActivity() {
private lateinit var moduleId:String
private lateinit var levelModule:Level.Module
private val moduleViewModel: ModuleViewModel by viewModel { parameterOf(moduleId, levelModule) }
override fun onCrea
在我的应用程序中,我在活动和片段之间共享数据。我正在使用这个sharedviewmodel特性的koin。基本上,当我登录时,我是在mainactivty中设置令牌值,并以片段的形式成功地访问它。在重新创建活动之后,我将设置令牌,但无法访问片段中更新的令牌值。我正在得到旧的价值。
我试着用毁灭的方法移除观察者,但这一点也没有帮助。我不知道问题出在哪里。
视图模型类
class SharedViewModel : ViewModel() {
var token = MutableLiveData<String>()
fun setToken(t: String)
我正在启动我的viewModel的单元测试,并且我需要注入一个存储库依赖项,但是当我运行第一个验证Koin是否正在运行的测试时,抛出了异常: org.koin.core.error.InstanceCreationException:无法为以下类型创建实例:Single,primary_type:'com.ramattec.meussaloes.data.repository.service.ServiceRepository‘ at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61)
我有一个视图模型,它是在我的MainActivity中通过Koin库实例化的- class SharedInformationViewModel : ViewModel() {
val deviceId : MutableLiveData<String> = MutableLiveData<String>()
}
class MainActivity : AppCompatActivity() {
private val sharedInformationViewModel: SharedInformationViewModel by inject
我目前在EF中有三个模型(房子,房间,物品)。
public class House
{
property int ID { get; set; }
property string Name { get; set; }
property List<Room> Rooms { get; set; }
}
public class Room
{
property int ID { get; set; }
property string Name { get; set; }
property List<Item> Items { get;