java – Dagger 2没有初始化变量
发布时间:2020-12-15 02:13:33 所属栏目:Java 来源:网络整理
导读:现在我正在尝试在我的项目中实施匕首,我有一个问题.在应用程序组件中初始化的变量未在我的活动中初始化.这是我的代码. 应用: public class MyApplication extends Application { private ApplicationComponent applicationComponent; @Inject public Contex
现在我正在尝试在我的项目中实施匕首,我有一个问题.在应用程序组件中初始化的变量未在我的活动中初始化.这是我的代码.
应用: public class MyApplication extends Application { private ApplicationComponent applicationComponent; @Inject public Context context; @Override public void onCreate() { super.onCreate(); applicationComponent = DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build(); applicationComponent.inject(this); } public ApplicationComponent getApplicationComponent() { return applicationComponent; } } 这里变量context!= null 活动: public class MainActivity extends AppCompatActivity { private ActivityComponent activityComponent; @Inject Context context; @Override protected void onStart() { super.onStart(); activityComponent = DaggerActivityComponent.builder() .activityModule(new ActivityModule(this)) .applicationComponent(((MyApplication) getApplication()).getApplicationComponent()) .build(); activityComponent.inject(this); } } 这里context == null. 匕首: @Component(modules = {ApplicationModule.class}) public interface ApplicationComponent { void inject(MyApplication application); Context getApplicationContext(); } @Component(modules = {ActivityModule.class},dependencies = {ApplicationComponent.class}) public interface ActivityComponent { void inject(MainActivity mainActivity); } @Module public class ApplicationModule { private Application application; public ApplicationModule(MyApplication application) { this.application = application; } @Provides Context provideApplicationContext() { return application.getApplicationContext(); } } @Module public class ActivityModule { Activity activity; public ActivityModule(MainActivity activity) { this.activity = activity; } } 因此,dagger仅在应用程序类中提供“Context”,但不在MainActivity类中提供它.我做错了什么?可能是我要改变一些东西. 谢谢! 解决方法
设置如下:
public class MyApplication extends Application { private ApplicationComponent applicationComponent; @Override public void onCreate() { super.onCreate(); applicationComponent = DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this)) .build(); } public ApplicationComponent getApplicationComponent() { return applicationComponent; } } 和你的活动: public class MainActivity extends AppCompatActivity { @Inject Context context; @Override protected void onStart() { super.onStart(); ((MyApplication) getApplication()).getApplicationComponent().inject(this); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |