Dagger: POJO中的字段注入

3
我从未尝试过Guide或其他DI库,但尝试在Android应用程序中使用来自Square的Dagger。它对Fragments非常有效,但不适用于POJO。user guide假定您具有一些关于DI的知识,因为它没有进行更详细的解释。我应该怎么做才能将restAdapater注入到我的POJO中?如果我进行字段注入,使用相同的代码,在Fragment中可以正常工作。
public class MyApplication extends Application {
    private ObjectGraph objectGraph;

    @Override
    public void onCreate() {
        super.onCreate();
        objectGraph = ObjectGraph.create(new DIModule(this));

    }

    public ObjectGraph objectGraph() {
        return objectGraph;
    }

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

    ...
    @Module(entryPoints = { 
    MainActivity.class,  
    .....,
    Auth.class, 
    RestAdapter.class
    })
    static class DIModule {@Provides
        @Singleton
        public RestAdapter provideRestAdapter() {
            return new RestAdapter.Builder().setServer(
                    new Server(Const.BASE_URL)).build();
        }
    }
}

//POJO

public class Auth {

    @Inject
    RestAdapter restAdapater;


    String Username;
    String Password;

    public String authenticate() {
     ...

     Api api = restAdapater.create(..)  // **restAdapater is null**

     }
}

所有碎片都衍生自下面的内容,并且其中的DI工作正常。在Eric Burke最近的演讲中,他解释说这是必要的,因为Android构建了对象。
public class BaseFragment extends Fragment {
    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);

        ((MyApplication) getActivity()
                .getApplication())
                .inject(this);
    }

}
1个回答

8

如果您自己创建了一个Auth实例,那么Dagger将不会意识到这个实例,并且无法为您注入所需的依赖项。

由于您已经在Module entryPoints中声明了Auth.class,因此您只需要请求ObjectGraph提供Auth实例即可:

Auth auth = objectGraph.get(Auth.class);

Dagger将知道需要提供Auth的实例,即使用RestAdapter注入它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接