我目前正在尝试将Dagger 2集成到Android应用程序中.我的项目设置如下:
在我的库项目中,我定义了一个类,我稍后将其注入到库中的其他需要它的类(活动和常规类)以及应用程序项目中.
@Singleton
public class MyManager{
@Inject
public MyManager(){
//Do some initializing
}
}
Run Code Online (Sandbox Code Playgroud)
现在 - 例如在我的片段或活动或常规类中,我将按如下方式注入上述Singleton:
public class SomeClass{
@Inject
MyManager myManager;
}
Run Code Online (Sandbox Code Playgroud)
或者我想,因为在实践中,myManager总是为空.显然它的构造函数从未被调用过,所以我想我必须错过配置方面的东西?或者我可能误解了文档,但这并不意味着以这种方式工作?MyManager类的目的是成为应用程序范围内可访问的组件累积实体 - 这就是我选择@Singleton的原因.
UPDATE
为了避免混淆:我在评论中提到了我的组件,我认为 - 这是指"基于组件的设计"意义上的组件,与匕首无关.我上面列出了基于匕首的代码 - 我的代码中没有任何与dagger相关的代码.
当我开始添加@Component时,我遇到了一些编译器问题,因为我的dagger2设置不正确 - 请查看这个关于如何正确设置dagger2的真正有用的线程:https://stackoverflow.com/a/29943394/1041533
更新2
这是我更新的代码,基于G. Lombard的建议 - 我更改了代码如下 - 原始的Singleton在库项目中:
@Singleton
public class MyManager{
@Inject
public MyManager(){
//Do some initializing
}
}
Run Code Online (Sandbox Code Playgroud)
库项目中还有bootstrap类:
@Singleton
@Component
public interface Bootstrap {
void initialize(Activity activity);
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的活动中使用上面的Bootstrap类(在我的具体应用程序中,而不是在库项目中!但是我在库中也有访问Bootstrap以注入MyManager的类/活动):
public class MyActivity extends Activity{
@Inject …Run Code Online (Sandbox Code Playgroud)