为什么我的子依赖项没有在 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 = true
和 complete = false
,除非您知道自己在做什么。使用此设置,您可以在编译时禁用某些验证。
我很难弄清楚如何将 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 = true
和 complete = false
,除非您知道自己在做什么。使用此设置,您可以在编译时禁用某些验证。