Dagger最基本的使用

2019-10-22  本文已影响0人  凌烟醉卧

记录此文,以此学习
dagger任意对象都是可以注入的,dagger主要用于中大型项目。
Dagger的作用:

归结起来,Dagger的好处或者作用就是提高工作效率代码层次分明解耦

如何使用?

Module提供对象,对象的初始化工作都会写在这个Module中,项目中的Module会有很多个,比如Module1(提供httpObject),Module2(提供databaseObject),Module3(提供PresenterObject)当我们想向Activity或者其他的地方注入的时候,这个时候需要一个Component,把3个Module放到Component中,然后就可以在Activity或者其他的地方使用httpObject和databaseObjet了。

Dagger2的基本使用

先来两个对象类
HttpObject.java

public class HttpObject {
}

DatabaseObject.java

public class DatabaseObject {
}

再来两个Module
HttpModule.java

@Module
public class HttpModule{
    @Provides
    public HttpObject provederHttpObject(){
        return new HttpObject();
    }
}

DatabaseModule.java

@Module
public class DatabaseModule {
    @Provides
    public DatabaseObject providerDatabaseObject(){
        return new DatabaseObject();
    }
}

使用@Module表示这是一个module,使用@Provides表示这个方法可以提供一个对象。
再来一个Component
MyComponent.java

@Component(modules = {HttpModule.class,DatabaseModule.class})
public interface MyComponent {
    void injectMainActivity(MainActivity mainActivity);
}

@Component表示这是一个组件,将相关的类使用modules放到Component中,MyComponent这个类会自动生成DaggerMyComponent,在Activity或者其它类中注入的时候使用DaggerMyComponent。

再MainActivity中使用

public class MainActivity extends AppCompatActivity {
    @Inject
    HttpObject httpObject1;
    @Inject
    HttpObject httpObject2;
    @Inject
    DatabaseObject databaseObject;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //第一种注入方法
        DaggerMyComponent.create().injectMainActivity(this);
        //第二种注入方法
//        DaggerMyComponent.builder().httpModule(new HttpModule())
//                .build()
//                //到这里就已经产生了module和component对象
//                .injectMainActivity(this);

        Log.i("log",httpObject1.hashCode()+"");//189244270
        Log.i("log",httpObject2.hashCode()+"");//106973711
        Log.i("log",databaseObject.hashCode()+"");//69880476
    }
}
上一篇 下一篇

猜你喜欢

热点阅读