Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between module and component in Dagger2

Tags:

Can somebody please tell me what is the basic difference between the module and component in Dagger2?

If possible, please tell with some examples, so that it is easily understood.

like image 622
Timur Mukhortov Avatar asked Feb 23 '18 13:02

Timur Mukhortov


1 Answers

We can group dependencies in a module for example Network module can provide HTTPClient Retrofit,GSON, HTTP Logger etc.

similarly we can have Database Module, Application Module, or any feature specific module.

Component is a bridge between Module(provider) and Activity/Fragment(Consumer) and it can have more than one module.

Inside Activity/Fragment we can get these dependencies by defining like below

@Inject  Gson gson;    

these dependency will be fulfilled as soon as you inject the component(in this case network component which contains network module which contains Gson Provider method)

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

here is a very good tutorial with simple example https://code.tutsplus.com/tutorials/dependency-injection-with-dagger-2-on-android--cms-23345

In other words

A dependency consumer asks for the dependency(Object) from a dependency provider through a connector.

Dependency provider:

Classes annotated with @Module are responsible for providing objects which can be injected. Such classes define methods annotated with @Provides. The returned objects from these methods are available for dependency injection.

Dependency consumer:

The @Inject annotation is used to define a dependency.

Connecting consumer and producer:

A @Component annotated interface defines the connection between the provider of objects (modules) and the objects which express a dependency. The class for this connection is generated by the Dagger.

like image 155
44kksharma Avatar answered Oct 08 '22 03:10

44kksharma