Transfuse与Dagger相比如何?

 zg18156zg你 发布于 2023-02-13 16:47

我正在尝试决定是否使用Transfuse或Dagger进行Android依赖注入.我从未使用过Transfuse,并且对Dagger有基本的了解.非常感谢.

1 个回答
  • 首先,我是Transfuse的主要作者,因此这个答案在这方面可能有点倾斜.

    Transfuse和Dagger都以类似的方式处理Android的依赖注入/控制反转.两者都通过JSR269在编译时使用注释处理来生成支持DI/IOC功能的代码.这允许他们避免通常与非Android Java中的DI容器相关联的昂贵的基于运行时反射的分析.在没有详细说明的情况下,Dagger和Transfuse确实以不同的方式处理代码生成,这反映在库的功能上.此外,Transfuse和Dagger都使用通用的JSR330注释(@Inject,Provider等).这意味着他们都遵循Guice式注射方案.

    以下是在Dagger中创建对象图的方法:

    public class DaggerActivity extends Activity {
    
        @Inject Example example;
    
        @Override protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ObjectGraph.create().inject(this);
            //do something else...
        }
    }
    

    Transfuse中的等效代码使用其@Factory功能:

    @Factory
    public interface Injector {
        Example get();
    }
    
    public class TransfuseActivity extends Activity {
    
        Example example;
    
        @Override protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            example = Factories.get(Injector.class).get();
            //do something else...
        }
    }
    

    Transfuse旨在以下列方式使用,但是,利用POJO组件,生命周期事件等:

    @Activity
    public class TransfuseActivity{
    
        @Inject Example example;
    
        @OnCreate public void doSomethingElse(){
            //do something else...
        }
    }
    

    这是Transfuse和Dagger中DI引擎的一些细微差别:

      Transfuse支持(以及它可以)循环依赖,Dagger故意在这种情况下抛出异常.

      Transfuse满足JSR330,Dagger特别没有.Dagger开发人员希望在简单性方面犯错误,避免方法注入允许他们避免一些令人困惑的案例(链接).

      对于没有生成代码的情况,Dagger有一个基于反射的引擎.Transfuse不会并且需要生成代码(运行注释处理器)才能工作.

      Transfuse将注入私有字段,构造函数和方法(由于反射开销,不一定推荐).在这种情况下,Dagger抛出异常.

      Dagger以非常直接的方式使用模块,反映了Guice的功能.每次创建对象图时,都可以选择使用Module类进行配置,即:ObjectGraph.create(new DripCoffeeModule()).Transfuse的配置模块有点不同,因为它在编译时被合并到应用程序中.Transfuse中的每个模块都是项目的全球模块(这可能会在Transfuse的未来版本中发生变化,但对于Transfuse的使用尚未成为问题).

      Dagger中的单身人士是每个对象图,其中Transfuse中的Singletons是应用程序的全局.

    Dagger和Transfuse之间的最大区别在于Dagger专注于成为一个简单的依赖注入库,而Transfuse的重点是" 使用性能敏感技术使Android成为更好的API "

    Transfuse支持这些功能以及DI:

      POJO组件

      清单管理

      Roboguice/Butterknife风格注射

      轻量级事件系统(@Observes,@ OnCreate等)

      AOP

    如果您有兴趣,我建议您尝试使用Transfuse.就个人而言,我很想知道你与Dagger对比的经历.我们有一个邮件列表,您可以在该列表中与社区共享,并通过网站上的文档进行分析.

    2023-02-13 16:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有