什么是匕首?为什么我们使用它?

Dav*_*oel 15 android

如何在我的项目中使用Dagger以及使用它的目的是什么?我在谷歌搜索它但我不清楚它.如果可能的话,请给我最好的解决方案和一个例子.

Sal*_*azi 22

许多Android应用程序依赖于实例化通常需要其他依赖项的对象.例如,可以使用诸如Retrofit之类的网络库来构建Twitter API客户端.要使用此库,您可能还需要添加解析库,例如Gson.此外,实现身份验证或缓存的类可能需要访问共享首选项或其他公共存储,需要首先实例化它们并创建固有的依赖关系链.

Dagger 2为您分析这些依赖关系并生成代码以帮助将它们连接在一起.虽然还有其他Java依赖注入框架,但其中许多框架在依赖XML时遇到了限制,需要在运行时验证依赖性问题,或者在启动期间导致性能损失.Dagger 2完全依赖于使用Java注释处理器和编译时检查来分析和验证依赖关系.它被认为是迄今为止构建的最有效的依赖注入框架之一.

好处

以下列出了使用Dagger 2的其他优点:

  • 简化对共享实例的访问.正如ButterKnife库更容易定义对Views,事件处理程序和资源的引用一样,Dagger 2提供了一种获取对共享实例的引用的简单方法.例如,一旦我们在Dagger中声明我们的单例实例,例如MyTwitterApiClient或SharedPreferences,我们就可以使用简单的@Inject注释声明字段:

    public class MainActivity extends Activity {
    
       @Inject MyTwitterApiClient mTwitterApiClient;
       @Inject SharedPreferences sharedPreferences;
    
       public void onCreate(Bundle savedInstance) {
           // assign singleton instances to fields
           InjectorClass.inject(this);
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 轻松配置复杂的依赖项.存在一个隐式顺序,通常会在其中创建对象.Dagger 2遍历依赖图并生成易于理解和跟踪的代码,同时还可以避免编写大量样板代码,通常需要手动编写以获取引用并将它们作为依赖项传递给其他对象.它还有助于简化重构,因为您可以专注于要构建的模块,而不是关注需要创建的顺序.

  • 更简单的单元和集成测试因为依赖图是为我们创建的,所以我们可以轻松地交换出构成网络响应的模块并模拟这种行为.

  • Scoped实例您不仅可以轻松管理可以持续整个应用程序生命周期的实例,还可以利用Dagger 2定义寿命较短的实例(即绑定到用户会话,活动生命周期等).

  • 考虑到配置 Dagger 需要花费大量的时间和精力,我觉得您的示例并不完整。 (7认同)