设置:
Module 1
具有Class A
的外部依赖项Module 2
依赖于Class A
,但将来可能完全依赖于另一个模块/类APP
依赖于Module 2
我尝试将Module 2
中的类型别名添加到Class A
中。它暴露了类";正确地";(假设它是com.moduleTwo.ClassA
而不是com.moduleOne.ClassA
(,但它使APP
也需要依赖于Module 1
,否则它就不编译:Cannot access class 'com.moduleOne.ClassA'. Check your module classpath for missing or conflicting dependencies
如果不将模块1添加到APP build.gradle中,如何使模块2向A类公开别名?有没有办法";注入";对APP的依赖?
如果我理解正确,您希望在不使用依赖于外部库的应用程序代码的情况下替换模块。
当应用程序的代码只依赖于抽象而不依赖于具体实现时,您可以随时替换这些依赖关系。
下面的代码段显示应用程序中的User
模块依赖于interface A
,但A
的实际实现可能会有所不同。
// library module A
interface A {
fun doWork()
}
// library module B implements modules A & External
class B(private val external : External) : A {
override fun doWork() {
val result = external.getExternalStuff()
// more work with result
}
}
object Factory {
fun createB(params...): B {
val external = External(paramX)
// ...
return B(external)
}
}
// library module C implements module A
class C : A {
override fun doWork() {
println("C works")
}
}
// app
// User knows only 'A'
class User(private val a: A) {
fun help() {
a.doWork()
}
}
// Version 1: App implements modules A & B
// app module will know nothing about External
// but some factory or builder class to create B
fun appStarts() {
val a = Factory.createB(params...)
val user = User(a)
user.help()
}
// Version 2: App implements modules A & C
fun appStarts() {
val a = C()
val user = User(a)
user.help()
}
希望这能有所帮助。