有人能提供Dagger 2的好解释吗?

时间:2015-11-29 11:49:15

标签: java android dependency-injection dagger-2

我真的很难理解Dagger 2 Dependency注射系统。

我理解使用@Inject注释告诉Dagger我们需要在这里提供某种类型的实例。

但是,我不理解其他组件的各种角色,例如:@Module@Component@Provides以及它们如何协同工作以向适当的实例提供适当的实例依赖性。

有人可以简单而简洁地解释一下吗?

3 个答案:

答案 0 :(得分:20)

  

@Module :模块是其方法提供依赖关系的类,所以我们   定义一个类并用 @Module 注释它,因此,Dagger会知道   在哪里找到依赖项以满足它们的时候   构造类实例。模块的一个重要特征是   它们被设计成一起分割和组合(for   实例我们将看到,在我们的应用程序中,我们可以有多个组合   模块)。

     

@Component :组件基本上都是注射器,让我们说之间的桥梁    @Inject @Module ,其主要职责是放置   两者一起。他们只是为您提供所有类型的实例   例如,我们必须使用 @Component 注释一个接口   并列出将组成该组件的所有 @Modules ,如果有的话   它们丢失了,我们在编译时遇到错误。所有组件   了解它通过它提供的依赖关系的范围   模块。

     

@Provide :在模块内部,我们定义包含此注释的方法   它告诉Dagger我们想要如何构建和提供这些   提到的依赖。

我建议你读一下:

我想这有助于理解。

答案 1 :(得分:0)

您可以在此处找到有用的Dagger2示例项目和教程。

Dagger 2 working sample project with MVP

Video tutorial

Practical tutorial

答案 2 :(得分:-1)

****为什么使用Android Dependency Injection?****

我们宁愿每次都在我们的活动中实例化SharedPreferences,数据库和网络库,而宁愿在其他位置创建它们的实例,并在需要时将它们注入到我们的活动中。

什么是Dagger 2?

Dagger 2是一个编译时android依赖项注入框架。

以下是Dagger 2中使用的基本注释:

@Module:此类用于构造最终将作为依赖项提供的对象的类。

@Provides:用于Module类中将返回对象的方法上。

@Inject:用于构造函数,字段或方法,表示已请求依赖项。

@Component:Module类未直接向请求它的类提供依赖项。为此,使用了Component接口,它充当@Module和@Inject之间的桥梁。

@Singleton:这表示将仅创建依赖项对象的单个实例。