我目前正在尝试将Dagger添加到我的android项目中。对于应用程序项目而言,如何构建ObjectGraph对我来说很容易理解。但是我不太清楚在我的android库项目中执行此操作的最佳方法是什么。

我是否应该继续在应用程序的应用程序类中构建ObjectGraph并将OG传递给LibraryModule-将库的OG附加到Apps OG?还是应该在库中构建整个ObjectGraph?

如果我需要通过ObjectGraph.inject(this)在库中注入(inject)一个类怎么办?在我的Apps项目中,我可以从Application类获取OG。但是如何在库中处理呢?我应该为ObjectGraph添加@Provides方法吗?

非常感谢您的帮助。

编辑:
简而言之:我如何在我的图书馆项目中调用ObjectGraph.inject(this),因为我是在应用程序类中构建的,所以我无法访问OG?

最佳答案

如果有人使用Dagger 2到达这里,这就是我在App中所做的方法:

在库模块中,我创建了以下模块和组件:

@Module
public class ModuleUtil {

    @Provides
    public RestTemplate provideRestTemplate() {
        return new RestTemplate();
    }

}

@Singleton
@Component(
        modules = {
                ModuleUtil.class
        })
public interface MainComponent {
    void inject(Postman postman);
}

然后,为了管理注入(inject),我在下面创建了Singleton:
public class DaggerWrapper {

    private static MainComponent mComponent;

    public static MainComponent getComponent() {
        if (mComponent == null) {
            initComponent();
        }
        return mComponent;
    }

    private static void initComponent () {
       mComponent = DaggerMainComponent
                .builder()
                .utilModule(new ModuleUtil())
                .build();
    }
}

当库模块中的某个类需要注入(inject)其成员时,我只需调用DaggerWrapper.getComponent().inject(this);即可。

07-25 23:23