tata88k / dagger2-discussion

dagger2-discussion
5 stars 0 forks source link

Dagger2 疑问 #1

Open wangxuyang518 opened 7 years ago

wangxuyang518 commented 7 years ago

Dagger2 大部分都是了解一点皮毛;只会一个注入。在项目中建立那么多类 接口。而且在类中还要写注入的代码。。做了一系列操作 仅仅是注入了一个adapter 或者present。。想问这样真的有意义吗

DanielYP commented 7 years ago

dagger2也就是依赖注入框架的实现。意义在于帮助你管理对象。你不需要关心对象是如何创建,你只管在你用对象的地方加入@inject。你不在关心对象如何创建。因为有的对象创建很麻烦,比如构造参数有很多,或者这个对象里面有很多组件也要new。可能创建一个对象就需要十几行。这放在我们代码中,并不美观。当然这只是一个优点。接下来请后面的人开始你们的表演

tata8k commented 7 years ago

依赖注解的核心思想是:只管使用,不管创建。这点在错综复杂的项目中,作用很明显。在有相同scope的component里面,整个component里面的对象采用集中式管理,对象之间的访问是直达的,不需要set、get、构造传参数等方式进行依赖注入。component能很好地管理对象的生命周期,你不需要写单例模式,更不需要关心你的单例是不是线程安全的,因为dagger2已经帮你管理得很好。

zombiu commented 6 years ago

大神在吗,有个问题想请教大神,比如说有一个Activity是一个Subcomponent,里面有2个fragment也是Subcomponent,我想在activity中实例化好一个User对象提供给两个fragment使用。以前的我的做法是通过build activity的component时,new UserModule(user)把实例化好的user传进去,现在通过AndroidInjection.inject(this)改如何在Activity中把这个实例化好的user传递进去?

tata8k commented 6 years ago

在activity的module里面用provide方法或Use构造函数本来就可以inject,然后在activity或者它的subcomponent 里面任意地方inject user,只要scope相同,这个user实例就是同一个

tata8k commented 6 years ago

比较高效的dagger配置请参照example例子https://github.com/thepacific/android-architecture/tree/master/architecture/example

zombiu commented 6 years ago

大神,我的意思是在2.11之前的版本,需要通过DaggerXXXComponent.builder().buid.inject来注入,那么在传入module实例时,可以传递一些参数进去。在2.11及之后,注入者对被注入者不可见,只需要一句AndroidInjection.inject(this),就可以实现注入,但是现在我想传递参数,这样就传递不了了。说的可能不是很清楚,不知道大神明白吗?

tata8k commented 6 years ago

@zombiu 你非要用AndroidInjection.inject(this)的话,在Activity里面创建一个User实例,有一个getUser()方法。然后在ActivityModule里面提供providerUser方法

class  YourActivityModule {
    @Provides
    fun provideUser(activity: YourActivity): User {
        return activity.getUser()
    }
}

又或者你可以在activity的component Builder里面通过@BindInstance把User传过去,然后在ActivityModule直接用

不知道是不是你要的?

zombiu commented 6 years ago

大神,这种方法挺新颖的,activity没有直接从modeul传入实例,这个activity的实例是自动从AndroidInjection.inject(this)这里获取的activity实例吗?

ghost commented 6 years ago

@zombiu 嗯 嗯对的

zombiu commented 6 years ago

@all 谢谢各位老哥的回答,谢谢!