Android Dagger2:如何在非Activity / Fragment类中使用依赖注入

时间:2018-04-18 06:02:24

标签: android dependency-injection dagger-2

我可以在onCreate()中使用 AndroidInjection.inject(this) AndroidSupportInjection.inject(this)轻松使用依赖注入。我想在java类中使用依赖注入,这既不是活动也不是片段

这是我的AppComponect类

@Singleton
@Component(modules = {
        AndroidSupportInjectionModule.class,
        ApplicationModule.class,
        ActivityBuilder.class})

public interface ApplicationComponent extends AndroidInjector<DaggerApplication> {
void inject(AppController appController);
void inject(APIHelper apiHelper);

@Override
void inject(DaggerApplication daggerApplication);

@Component.Builder
interface Builder{
    @BindsInstance
    Builder application(Application application);
    ApplicationComponent build();
}

非活动/片段类

public class APIHandler {

    /**
     * Activity reference object
     */
    private Activity mActivity;
    /**
     * Debug TAG
     */
    private String TAG = APIHandler.class.getSimpleName();
 @Inject
    DataManager dataManager;

    /**
     * Public Constructor for this class
     *
     * @param mActivity
     * @param webAPIResponseListener
     */
    public APIHandler(Activity mActivity, WebAPIResponseListener webAPIResponseListener) {
        this.mActivity = mActivity;
        this.mResponseListener = webAPIResponseListener;
        postAPICall();
    }
//API call
    public void postAPICall() {
//doing something
if(dataManager != null){
dataManager.setName();
}
}

1 个答案:

答案 0 :(得分:0)

您只能将{strong> AndroidInjection 与({3}}所用的(Activity,Fragment,Service,ContentProvider和BroadcastReceiver)一起使用。

如果你想在java类中使用依赖注入,它既不是一个活动,也不是上面的任何类,所以你必须创建一个类似于

的接口
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {

   AuthComponent plusAuthComponent();

   void inject(AnyClassType any);
   void inject(AnotherType another);
   void inject(Again again);

}

我认为the documentation会对你有帮助。
关于Youtube的另一个惊人的教程this