2017-07-14 29 views
0

我使用https://guides.codepath.com/android/Dependency-Injection-with-Dagger-2的dagger2 demo。我想在DemoDaggerSubActivity.java中使用子组件进行ArrayAdapter注入。Dagger2子组件错误 - 其中必须注释方法ArrayAdapter

我Application.java

@Override public void onCreate() { 
    super.onCreate(); 

    mApplicationComponent = DaggerApplicationComponent.builder() 
      .applicationModule(new ApplicationModule(this)) 
      .build(); 
} 


public ApplicationComponent getApplicationComponent() { 
    return mApplicationComponent; 
} 

我MyActivityModule.java

@Module 
public class MyActivityModule { 
private final DemoDaggerSubActivity activity; 

// must be instantiated with an activity 
public MyActivityModule(DemoDaggerSubActivity activity) { this.activity = activity; } 

@Provides 
@MyActivityScope 
@Named("my_list") 
public ArrayAdapter providesMyListAdapter() { 
    return new ArrayAdapter<String>(activity, android.R.layout.activity_list_item); 
} 

} 

我MyActivitySubComponent.java

@MyActivityScope 
@Subcomponent(modules={ MyActivityModule.class }) 
public interface MyActivitySubComponent { 
    @Named("my_list") ArrayAdapter myListAdapter(); 
} 

我ApplicationComponent.java

@Singleton 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 
void inject(DemoDaggerSubActivity activity); 

// factory method to instantiate the subcomponent defined here (passing in the module instance) 
MyActivitySubComponent newMyActivitySubcomponent(MyActivityModule activityModule); 

} 

我DemoDaggerSubActivity.java

@Inject @Named("my_list") 
ArrayAdapter arrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

((AttendanceApplication) getApplication()).getApplicationComponent().newMyActivitySubcomponent(new MyActivityModule(this)).inject(this); 

} 

项目后重建我有错误

enter image description here

我在哪里标注方法ArrayAdapter?

+0

你已经错过了将子组件添加到图中,从而导致错误 – Jileshl

回答

0

必须从ApplicationComponent.java取出注射方法,并把它MyActivitySubComponent.java

新MyActivitySubComponent.java

@MyActivityScope 
@Subcomponent(modules={ MyActivityModule.class }) 
public interface MyActivitySubComponent { 

    void inject(DemoDaggerSubActivity activity); 

    @Named("my_list") ArrayAdapter myListAdapter(); 
} 

新ApplicationComponent.java

@Singleton 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 

    // factory method to instantiate the subcomponent defined here (passing in the module instance) 
    MyActivitySubComponent newMyActivitySubcomponent(MyActivityModule activityModule); 

} 
相关问题