Kotlin android在另一个模块中暴露一个模块的类



设置:

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() 
}   

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新