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

Tim*_*tov 5 android dependency-injection

谁能告诉我是什么之间的基本区别module,并componentDagger2

如果可能的话,请告诉我们一些例子,以便于理解.

44k*_*rma 23

我们可以在模块中对依赖关系进行分组,例如,Network模块可以提供HTTPClient Retrofit,GSON,HTTP Logger等.

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

组件是Module(提供者)和Activity/Fragment(Consumer)之间的桥梁,它可以有多个模块.

在Activity/Fragment中,我们可以通过定义如下来获得这些依赖

@Inject 
Gson gson;   
Run Code Online (Sandbox Code Playgroud)

注入组件后,这些依赖关系将被实现(在这种情况下,网络组件包含包含Gson Provider方法的网络模块)

getNetworkComponent().inject(MyActivity.this/MyFragment.this)
Run Code Online (Sandbox Code Playgroud)

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

换一种说法

依赖性使用者通过连接器向依赖性提供者请求依赖性(Object).

依赖提供者:

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

依赖性消费者:

@Inject注释用于定义依赖项.

连接消费者和生产者:

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