kotlin 向应用Activity注入接口- Hilt+Android

n6lpvg4x  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(209)

DI新手。假设在模块ABC中有一个接口XYZ,它被主应用项目作为依赖项使用。我想将该接口XYZ注入到主项目的MainActivity中。请看下面我是如何尝试的。

ABC模块内容
XYZ

interface XYZ {
       fun init()
    }

TestView类实现接口

class TestView: XYZ {  
    override fun init(){
    }
}

主要工程内容
应用程序模块类别

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    fun xyz(): XYZ = TestView()
    
}

主要活动

@AndroidEntryPoint
class MainActivity : AppCompactActivity() {
   @Inject lateinit var xyz : XYZ

   override onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       xyz.init()
   }
}

1.如果有什么问题请告诉我。
1.如果我对另一个类使用相同的接口,比如说TestView2,并在主项目的另一个Activity中使用它。我可以在AppModule类中也提供该视图吗?如果可以,我如何将它与第一个视图区分开来,因为两者都将使用相同的接口?
先谢谢你。

k5ifujac

k5ifujac1#

我不是高级开发人员,所以请对我的话持保留态度;)
如果有什么问题请告诉我。
是和否(见下文)
它将工作,有些人喜欢以这种方式提供接口,
但是,使用@Binds会更好(它生成的代码更少,这会使您的应用程序更小,构建时间更快)
你可以在这里找到如何使用它
如果我对另一个类使用相同的接口,比如说TestView 2,并在主项目的另一个Activity中使用它。我可以在AppModule类中也提供该视图吗?如果可以,我如何将它与第一个视图区分开来,因为两者都将使用相同的接口?
如果你创建了两个返回相同类型的provide方法,dagger将不知道使用哪个方法来提供你的依赖项,这就是为什么你可以命名你的提供者(使用@Named注解),你可以找到更多关于它的here
(also,略加评论:在一个应用程序中使用多个Activity不再是真正推荐的做法,我个人也反对这样做)

相关问题