Jul*_* A. 6 comparison android dependency-injection dagger transfuse
我正在尝试决定是否使用Transfuse或Dagger进行Android依赖注入.我从未使用过Transfuse,并且对Dagger有基本的了解.非常感谢.
Joh*_*sen 12
首先,我是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引擎的一些细微差别:
ObjectGraph.create(new DripCoffeeModule()).Transfuse的配置模块有点不同,因为它在编译时被合并到应用程序中.Transfuse中的每个模块都是项目的全球模块(这可能会在Transfuse的未来版本中发生变化,但对于Transfuse的使用尚未成为问题).Dagger和Transfuse之间的最大区别在于Dagger专注于成为一个简单的依赖注入库,而Transfuse的重点是" 使用性能敏感技术使Android成为更好的API "
Transfuse支持这些功能以及DI:
如果您有兴趣,我建议您尝试使用Transfuse.就个人而言,我很想知道你与Dagger对比的经历.我们有一个邮件列表,您可以在该列表中与社区共享,并通过网站上的文档进行分析.
| 归档时间: | 
 | 
| 查看次数: | 816 次 | 
| 最近记录: |