为什么我的子依赖项没有在 Dagger 中设置?

Why does my sub-dependency not get set in Dagger?

我很难弄清楚如何将 CachedRithms 注入我的 RithmioManager 并将 CachedKamms 注入我的 KamilManager

我有以下文件:

AppScopeModule:

@Module
        (
                library = true,
                complete = false,
                injects = {
                        KamilApplication.class,
                        KamilManager.class
                }
        )
public class AppScopeModule {

    /* package */ static Context sApplicationContext = null;
    private final Context mApplicationContext;

    AppScopeModule(Context applicationContext) {
        KamilManager.initInstance(applicationContext);
        mApplicationContext = applicationContext;
    }

    @Provides
    @Singleton
    KamilManager provideKamilManager() {
        return KamilManager.getInstance();
    }

}

卡米尔应用程序:

public class KamilApplication extends Application implements Injector {

    private ObjectGraph mObjectGraph;

    @Inject
    KamilManager KamilManager;

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

        AppScopeModule sharedAppModule = new AppScopeModule(this);

        // bootstrap. So that it allows no-arg constructor in AppScopeModule
        sharedAppModule.sApplicationContext = this.getApplicationContext();

        List<Object> modules = new ArrayList<Object>();
        modules.add(sharedAppModule);
        modules.add(new AuthModule());
        modules.addAll(getAppModules());

        mObjectGraph = ObjectGraph.create(modules.toArray());
        mObjectGraph.inject(this);
    }
}   

KamilManager

public class KamilManager {

    @Inject
    CachedKamms mCachedKamms;

    private static KamilManager instance;
    private boolean mWearIsConnectedToMobile;

    private KamilManager() {
        Log.d(TAG, "KamilManager private constructor");
    }

    public static void initInstance(Context appContext) {
        if (instance == null) {
            instance = new KamilManager();
            .....doing more things here...
        }
    }

    public static KamilManager getInstance() {
        return instance;
    }   
}

但是当我初始化应用程序时mCAchedKamms总是空白。知道我做错了什么吗?

您需要在 KamilManager 的某处调用 ObjectGraph.inject(this)

我建议您将此代码添加到您的 KamilApplication class:

public ObjectGraph getObjectGraph() {
    return mObjectGraph;
}

之后,您需要以某种方式在 KamilManager 中获取 KamilApplication 的实例(也许通过构造函数传递它?)并调用:

kamilApplication.getObjectGraph.inject(this);

在此调用之后,class KamilManager 中用 @Inject 注释的每个字段都应该被注入。

只需将 CachedKamms 的构造函数注释为 @Inject

额外:

避免使用 library = truecomplete = false,除非您知道自己在做什么。使用此设置,您可以在编译时禁用某些验证。