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