dagger2記錄篇,dagger2記錄

來源:互聯網
上載者:User

dagger2記錄篇,dagger2記錄

作為一個碼農,什麼都不用多講,貼代碼

build project

build module

Application

public class App extends Application { private AppComponent appComponent; @Override public void onCreate() { super.onCreate(); appComponent= DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); } public AppComponent getAppComponent() { return appComponent; }}View Code
AppComponent
@Singleton@Component(modules = { AppModule.class })public interface AppComponent { @ContextLife("Application") App getApplication(); RetrofitHelper retrofitHelper(); //提供http的協助類}View Code
AppModule
@Modulepublic class AppModule { private App application; public AppModule(App application){ this.application=application; } @Provides @Singleton @ContextLife("Application") public App provideApplication(){ return application; } @Provides @Singleton public RetrofitHelper provideRetrofitHelper() { return new RetrofitHelper(); }}View Code
ActivityComponent
@ActivityScope@Component(dependencies = AppComponent.class, modules = ActivityModule.class)//關聯上下public interface ActivityComponent { Activity getActivity(); void inject(LoginActivity loginActivity);//要在類中使用注入功能 void inject(MainActivity mainActivity);}View Code
ActivityModule
@Modulepublic class ActivityModule { private Activity mActivity; public ActivityModule(Activity activity) { this.mActivity = activity; } @Provides @ActivityScope public Activity provideActivity() { return mActivity; } @Provides @ActivityScope public IPresenterFactory providePresenter(RetrofitHelper retrofitHelper) { return new PresenterFactory(retrofitHelper); }}View Code

Base裡面使用注入,否則無法注入

public abstract class PresenterActivity extends BaseActivity { private final static String TAG = "PresenterActivity"; protected abstract void initInject(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initInject(); } protected ActivityComponent getActivityComponent(){ return DaggerActivityComponent.builder() .appComponent(App.getInstance().getAppComponent()) .activityModule(getActivityModule()) .build(); } private ActivityModule getActivityModule() { return new ActivityModule(this); }}View Code

此時前提條件都有了

點擊運行自動產生注入代碼(沒問題的前提)

使用注入:

public class MainActivity extends PresenterActivity {    @Inject    protected IPresenterFactory mPresenter;//沒有建立對象,inject標籤注入類型    private final int BASIC_PERMISSION_REQUEST_CODE = 100;    private TextView username;    @Override    public void findView() {        username = findView(R.id.username);        username.setText(App.getInstance().getUserEntity().getName()+" hello");    }    @Override    public void init() {        if (mPresenter != null){            Toasts.showShort("mPresenter success",context);//注入成功會列印出success        }    }    @Override    public int layoutResID() {        return R.layout.activity_main;    }    @Override    protected void initInject() {        getActivityComponent().inject(this);    }    @Subscribe(threadMode = ThreadMode.MAIN)    public void onEvent() {        Toasts.showShort("重新整理UI",context);    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.