- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试决定是使用 Transfuse 还是 Dagger 进行 Android 依赖项注入(inject)。我从未使用过 Transfuse,并且对 Dagger 有基本的了解。非常感谢。
最佳答案
首先,我是 Transfuse 的主要作者因此这个答案可能有点偏向那个方向。
Transfuse 和 Dagger 都以类似的方式处理 Android 的依赖注入(inject)/控制反转。两者都在编译时通过 JSR269 使用注释处理生成支持 DI/IOC 功能的代码。这使他们能够避免通常与非 Android Java 中发现的 DI 容器相关的昂贵的基于运行时反射的分析。不谈细节,Dagger 和 Transfuse 确实以截然不同的方式处理代码生成,这反射(reflect)在库的特性中。此外,Transfuse 和 Dagger 都使用通用的 JSR330注解(@Inject、Provider 等)。这意味着它们都遵循 Guice 风格的注入(inject)方案。
以下是在 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 的 future 版本中发生变化,但这对于使用 Transfuse 来说还不是问题)。Dagger 和 Transfuse 的最大区别在于 Dagger 专注于成为一个简单的依赖注入(inject)库,而 Transfuse 的重点是“make Android a better API using performance sensitive techniques”
Transfuse 支持这些功能以及 DI:
如果您有兴趣,我建议您试试 Transfuse。就个人而言,我很想听听您将它与 Dagger 进行对比的体验。我们有一个 mailing list您可以在这里与社区分享并通过 documentation 进行漂亮的分享在网站上。
关于android - Transfuse 与 Dagger 相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306723/
我想知道是否有人在使用Transfuse以及它与 Android Annotations 的区别.我的意思是每一个的优缺点,以及除了这两个之外是否还有其他选择。 谢谢。 最佳答案 我可能不算数,因为我
我可以在我的 android 项目中成功设置 Transfuse,但是当涉及到使用 Android Studio 运行应用程序时,它会失败。可能是因为 Manifest xml 必须为空才能让 Tra
我正在尝试决定是使用 Transfuse 还是 Dagger 进行 Android 依赖项注入(inject)。我从未使用过 Transfuse,并且对 Dagger 有基本的了解。非常感谢。 最佳答
我如何创建一个注入(inject)了应用程序上下文的单例。仅使用 @Singleton 注释然后在构造函数上使用 @Inject 最终会生成一个无法编译的 UnscopedProvider 类。我怎样
我一直在研究 Transfuse (http://androidtransfuse.org/),现在正尝试解决 SharedPreferences。文档使这看起来非常简单: @Activity pub
我在使用 Android 的 Transfuse 框架时玩得很开心,但我无法弄清楚 Activity 如何通过 Intent 返回值。 通常在 Android 应用程序中,您会调用 startActi
我是一名优秀的程序员,十分优秀!