dagger2:组件依赖和子组件的区别

原文:Component Dependency vs Submodules in Dagger 2

译文的GitHub地址:dagger2:组件依赖和子组件的区别

译者注:发现很多人都忽略了这个重要的内容,没有完全翻译原文,只简单翻译了重点。有兴趣的可以查看原文

Component Dependency(组件依赖)

假如,你有一个ApplicationComponent持有一个Module里面包含LocationService,Resources,LayoutInflater等等,它们都需要Context参数。

你可能也想有一个DataComponent用来管理持久化WebService拿到的数据。

可DataComponent唯一缺的就是ApplicationComponent里面的Context.这就是Component Dependecy发挥作用的地方。你只需要给DataComponent声明依赖Application Component然后你就可以拿到Context了。

记住,你必须要在ApplicationComponent显示声明Context 因为这是消费父组件对象的唯一方法。它所有modules里面的对象不能用于child module

例子:

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {

    //显示声明 对子组件可见
    Application application();
}

@PerActivity
//声明依赖
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(MainActivity mainActivity);

}

Subcomponents(子组件)

和组件依赖最大的不同是当你接入父组件的时候,你可以访问它所有模块的所有对象而无需显示声明依赖父组件。

让我们假设你的LoginFragment需要一个组件:LoginComponent,它包含了一个用于处理业务逻辑的Presenter。Presenter想要调用WebService的方法获取数据,所以它需要依赖DataComponent里面的WebService.

这次你不用在LoginComponent中指定任何东西,但是在ApplicationComponent,你需要声明ApplicationComponent可以被LoginComponent继承如下:

LoginComponent plus(LoginModule module);

然后你需要手动hook into ApplicationComponent来获取它所有的对象:

getApplicationComponent().plus(new LoginModule(this));

不要忘了把你的子组件@Component替换成@Subcomponent。

例子:

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {

    //activy组件继承父组件
    ActivityComponent plus(ActivityModule module);

}

@ActivityScope
//声明Subcomponent
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(MainActivity activity);

    void inject(SearchActivity activity);

    FragmentComponent plus(FragmentModule module);

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,018评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 终于,把《平凡的世界》看完了。 一个朴实无华又气势磅礴的故事就这样结束了。 虽然我知道,每一个故事无论以什么样的方...
    土川兄一终身建设阅读 272评论 0 0
  • title: 小程序 入门date: 2017-04-11 03:50:12tags: 小程序categories...
    张知卓见阅读 201评论 0 0