[英]Dagger 2 doesn't initialize a variable
現在我正在嘗試在我的項目中實施匕首,我有一個問題。 在應用程序組件中初始化的變量未在我的活動中初始化。 這是我的代碼。 應用:
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);
}
}
老實說,這只是猜測,但您應該嘗試確定組件的范圍。
@Singleton
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
Context getApplicationContext();
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
@ActivityScope
@Component(dependencies={ApplicationComponent.class}, modules={ActivityModule.class})
public interface ActivityComponent extends ApplicationComponent {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.