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

@Module public class AppModule {private App application;public AppModule(App application){this.application=application;}@Provides@Singleton@ContextLife("Application")public App provideApplication(){return application;}@Provides@Singletonpublic 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

@Module public class ActivityModule {private Activity mActivity;public ActivityModule(Activity activity) {this.mActivity = activity;}@Provides@ActivityScopepublic Activity provideActivity() {return mActivity;}@Provides@ActivityScopepublic 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();@Overrideprotected 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 {@Injectprotected IPresenterFactory mPresenter;//没有创建对象,inject标签注入类型private final int BASIC_PERMISSION_REQUEST_CODE = 100;private TextView username;@Overridepublic void findView() {username = findView(R.id.username);username.setText(App.getInstance().getUserEntity().getName()+" hello");}@Overridepublic void init() {if (mPresenter != null){Toasts.showShort("mPresenter success",context);//注入成功会打印出success}}@Overridepublic int layoutResID() {return R.layout.activity_main;}@Overrideprotected void initInject() {getActivityComponent().inject(this);}@Subscribe(threadMode = ThreadMode.MAIN)public void onEvent() {Toasts.showShort("刷新UI",context);}}
转载于:https://www.cnblogs.com/LiuZhen/p/5923387.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
