孝允单注与秘密参数的构造函数

问题描述 投票:1回答:1

你好,我刚学孝允,怎么会变成这样Dagger2类中的孝允2.0提供?

@Singleton
open class AppExecutors(private val diskIO: Executor, private val networkIO: Executor, private val mainThread: Executor) {

    @Inject
    constructor() : this(
            Executors.newSingleThreadExecutor(),
            Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1),
            MainThreadExecutor())

    fun diskIO(): Executor {
        return diskIO
    }

    fun networkIO(): Executor {
        return networkIO
    }

    fun mainThread(): Executor {
        return mainThread
    }

    private class MainThreadExecutor : Executor {
        private val mainThreadHandler = Handler(Looper.getMainLooper())
        override fun execute(command: Runnable) {
            mainThreadHandler.post(command)
        }
    }
}

我尝试这样做:

single<AppExecutors> { AppExecutors(
    Executors.newSingleThreadExecutor(),
    Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1),
    AppExecutors.MainThreadExecutor())
}

但是AppExecutors.MainThreadExecutor()是私有的。是让公众唯一的解决办法?

android kotlin dependency-injection singleton koin
1个回答
2
投票

嗯,这是一个有点古怪的念头注入的东西是从使用DI外的私人实现细节。

此外,在Dagger2解决方案是实际工作围绕依赖注入一招。

所以,你需要做的决定:我想这是一个私人implemietation细节?如果是的话我会建议使用默认参数值,只有当你需要重写例如此实现使用注射供测试用。

open class AppExecutors(
    private val diskIO: Executor, 
    private val networkIO: Executor, 
    private val mainThread: Executor = AppExecutors.MainThreadExecutor()) {

和:

single<AppExecutors> { AppExecutors(
    Executors.newSingleThreadExecutor(),
    Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1)))
}

(请注意,在科特林使用默认参数值到底是相同于原始例如使用多个构造。)

否则,你应该让公众和类提取它。

© www.soinside.com 2019 - 2024. All rights reserved.