在Dagger2中,一般都是使用@provide方法注入接口。
在我们使用MVP模式搭建Android app的时候,一般我们会这样做,创建一个接口presenter命名为HomePresenter。
public interface HomePresenter {
Observable<List<User>> loadUsers()
}
然后创建一个这个接口的实例,叫做HomePresenterImp,
public interface HomePresenter {
Observable<List<User>> loadUsers();
}
public class HomePresenterImp implements HomePresenter {
public HomePresenterImp(){
}
@Override
public Observable<List<User>> loadUsers(){
//Return user list observable
}
}
但是请注意,在HomePresenterImp这个类中,我并没有使用@Inject在构造方法上。所以,我们要在module中我们经常会使用一个叫provide的注解提供这个类的对象,就像这样。
@Module
public class HomeModule {
@Provides
public HomePresenter providesHomePresenter(){
return new HomePresenterImp();
}
}
但是,如果我们需要添加一个依赖到presenter叫UserService,那就意味着,我们也要在module中添加一个provide方法提供这个UserService,然后在HomePresenterImp类中加入一个UserService参数的构造方法;
或者
我们可以使用@Binds这个注解就想这样:
@Module
public abstract class HomeModule {
@Binds
public abstract HomePresenter bindHomePresenter(HomePresenterImp homePresenterImp);
}
这个就是告诉dagger,这个HomePresenter是用的HomePresenterImp类实现的。当然,你会注意到这个class是抽象类。这就意味着我们可以添加抽象方法。
那么现在。只要在HomePresenterImp类中的构造方法加上@Inject注解,这样,我们就不需要添加依赖参数来提供provide方法了。
我们只要简单的在构造方法中使用@Inject;
@PerActivity
public class HomePresenterImp implements HomePresenter {
private UserService userService;
@Inject
public HomePresenterImp(UserService userService){
this.userService = userService;
}
@Override
public Observable<List<User>> loadUsers(){
return userService.getUsers();
}
}
如果你有提供实例类的方法只调用构造函数注入接口。在dagger中使用@Binds注解可以代替原有的样板模式。
英文好的就看英文吧,英文翻译过来,有些地方还是有点不能很好的解释清楚。
附上链接(需要翻墙):android.jlelse.eu/inject-interfaces-without-providing-in-dagger-2-618cce9b1e29
需要源码的朋友我就提供一个patloew大神写的MVVM模式中有用到@Binds的Demo,可以去对照运行。还有不懂的可以在下面留言。可以相互交流。
附上链接:GitHub - patloew/countries: An example Android app using Retrofit
作者:王者梦回Arvin
链接:https://www.jianshu.com/p/8bb4651f0fbf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于Dagger2中@Binds的使用
最新推荐文章于 2022-06-30 13:17:42 发布
本文介绍了如何在Dagger2中使用@provide方法和@Binds注解进行接口注入,并展示了在MVP模式下Android应用开发的具体实现过程。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言
237

被折叠的 条评论
为什么被折叠?



