Dagger2中模块和组件之间的区别

时间:2018-02-23 13:10:52

标签: android dependency-injection

有人可以告诉我modulecomponentDagger2之间的基本区别是什么?

如果可能,请举一些例子,以便易于理解。

1 个答案:

答案 0 :(得分:19)

我们可以将模块中的依赖项分组,例如,网络模块可以提供HTTPClient Retrofit,GSON,HTTP Logger等。

类似地,我们可以拥有数据库模块,应用程序模块或任何特定于功能的模块。

Component是Module(provider)和Activity / Fragment(Consumer)之间的桥梁,它可以有多个模块。

在Activity / Fragment中,我们可以通过定义如下

来获得这些依赖关系
@Inject 
Gson gson;   
只要注入组件(在这种情况下包含包含Gson Provider方法的网络模块的网络组件),就会实现这些依赖关系

getNetworkComponent().inject(MyActivity.this/MyFragment.this)

这是一个非常好的教程,内容简单 https://code.tutsplus.com/tutorials/dependency-injection-with-dagger-2-on-android--cms-23345

换句话说

依赖关系使用者通过连接器向依赖关系提供程序请求依赖关系(Object)。

依赖提供者:

使用@Module注释的类负责提供可以注入的对象。这些类定义了使用@Provides注释的方法。这些方法返回的对象可用于依赖注入。

依赖性消费者:

@Inject注释用于定义依赖关系。

连接消费者和制作人:

@Component带注释的接口定义了对象(模块)提供者与表示依赖关系的对象之间的连接。此连接的类由Dagger生成。