Ну, это немного странная идея внедрить что-то, что является частной реализацией, извне, используя DI.
Также решение в Dagger2 - это хитрость, которая фактически работает вокруг внедрения зависимостей.
Итак, вам нужно принять решение: хочу ли я, чтобы это было частной реализацией?Если да, я бы предложил использовать значение параметра по умолчанию и использовать инъекцию только тогда, когда вам нужно переопределить эту реализацию, например, для тестирования.
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)))
}
(Имейте в виду, что использование значений параметров по умолчанию в Kotlin в конечном итоге аналогично использованию нескольких конструкторов в исходном примере.)
В противном случае вы должны сделать его публичным и извлечь его из класса.