我想了解dagger2并在我的应用程序中实现.我已经阅读了很多关于它的好处.除非我完全理解,否则我无法在我的应用中获得它的好处.
我已经理解了@Module和@Inject.令我困惑的是@Component.我几乎没有相关的问题.
Module提供对象实例,Inject使用它.为什么我们之间需要组件?是否真的有必要缩小差距?我们可以使用没有任何方法的空接口组件吗?
构造函数对于模块类是否真的必要?如果模块类中没有构造函数,我们可以使用空构造函数初始化模块类吗?
为什么我们不能直接实例化模块类并构建依赖图而不是创建组件然后初始化它?
到目前为止,我在组件接口中只看到了两种方法
一个.void inject(活动/服务/片段); - 为什么我们需要为此方法提供活动或服务或片段的实例?为什么我们不能有这样的东西 -
void inject(); - 组件是否仍会生成依赖图?
我们可以从活动或服务以外的其他类注入或者像这样的片段 -
void inject(DataManager dataManager);
如果DataManager是单例实例怎么办?
湾 改造getRetrofit(); 这种方法和上面的方法有什么区别?为什么不采用任何输入参数?
我读到@Singleton只是匕首的范围.我们怎样才能真正创建一个在应用程序的生命周期内存在的单例对象?
假设我想使用dagger构建一个DataManager实例.它只有一个依赖.我为此编写了一个模块类和一个组件接口.如果我想在MainActivity中使用它,我会用它作为
@Inject DataManager dataManager;
...
@覆盖
protected void onCreate(Bundle savedInstanceState){
DataManagerComponent.Builder().DataManagerModule(new DataManagerModule()).build();
}
我想在许多其他活动中使用这个数据管理器,我不希望它是单例.我想将它保持在我使用它的当前活动范围.所以我会用
@Inject DataManager dataManager;
得到那个实例.我应该写
DataManagerComponent.Builder...........
Run Code Online (Sandbox Code Playgroud)
在每个活动oncreate()我使用@Inject DataManager dataManager?如果我必须写它,它不会创建更多的样板代码而不是简单地使用
DataManager dataManager = new DataManager();
假设有4个对象,它们相互依赖,如D依赖于C,C依赖于B等.
D - > C - > B - > A.
让我们假设我已经编写了模块类并为所有4提供了方法.如果我尝试在任何ActivityA中注入D
@Inject D d;
C,B,A会自动实例化吗?
让我们假设在ActivityB中我只需要注入B.如果我注入B就好了
@Inject B b;
匕首会再创造B和A吗?或者它会使用已经创建的那些?
如果有人花时间回答我的所有问题,我感激不尽.我不指望详细的答案.如果澄清这个概念就好了.期待着回应.提前致谢.