【问题标题】:Cant inject classes using Dagger on Android无法在 Android 上使用 Dagger 注入类
【发布时间】:2015-04-09 01:04:54
【问题描述】:

我开始使用 Dagger,我使用的是 1.2 版本,我有以下场景:

模块:

@Module(injects = {
    AuthenticationService.class
})
public class ServiceModule {

    @Provides
    AuthenticationService provideAuthenticationService() {
        return ServiceFactory.buildService(AuthenticationService.class);
    }

}

在我的应用程序类中,我创建了 ObjectGraph:

public class FoxyRastreabilidadeApplication extends Application {

     private static FoxyRastreabilidadeApplication singleton;

     @Override
     public void onCreate() {
         super.onCreate();
         createObjectGraph();
         singleton = this;
     }

     private void createObjectGraph() {
        ObjectGraph.create(ServiceModule.class);
     }
}

最后,在我的 LoginActivity 中,我尝试注入我的 AuthenticationService:

public class LoginActivity extends Activity implements LoaderCallbacks<Cursor> {

    private UserLoginTask mAuthTask = null;

    @Inject
    AuthenticationService authenticationService;
}

此时,当我尝试访问我的 AuthenticationService 实例时,它始终为空,这意味着它根本没有被注入,我调试了我的提供程序方法以确保它,所以,问题是,我错过了什么吗?如果有,是什么?

【问题讨论】:

    标签: android dependency-injection dagger


    【解决方案1】:

    您需要抓住ObjectGraph 并要求它直接注入您的对象。

    • 将实例变量添加到您的自定义Application 子类以保留创建的ObjectGraph

    this.objectGraph = ObjectGraph.create(ServiceModule.class);

    • 为您的Application 添加一个方便的方法来进行注入:

    public void inject(Object object) { this.objectGraph.inject(object); }

    • 在您需要注入的任何地方调用该方法,例如在您的Activity

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication)getApplication()).inject(this); ... }

    【讨论】:

    • 有道理,我会尽快尝试,如果可行,我很乐意接受您的回答,感谢您的回复:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多