我有一个简单的Android活动 ,只有一个依赖。 我将dependency injection到活动的onCreate如下所示: Dagger_HelloComponent.builder() .helloModule(new HelloModule(this)) .build() .initialize(this); 在我的ActivityUnitTestCase我想用Mockito模拟来覆盖依赖关系。 我假设我需要使用提供模拟的特定于testing的模块,但我无法弄清楚如何将此模块添加到对象图中。 在Dagger 1.x中,显然是这样做的: @Before public void setUp() { ObjectGraph.create(new TestModule()).inject(this); } 什么是匕首2.0相当于上述? 你可以在GitHub上看到我的项目和它的unit testing。
我正在评估Android应用程序的dependency injection(DI)框架。 顶级竞争者是:匕首(与黄油刀)和Android注释。 我明白,匕首和黄油刀来自相同的来源广场,它们是相辅相成的。 这里是我正在寻找的关键matrix: 易于使用(我们的构build基于Gradle,我们使用Android Studio IDE) testing支持(我们使用Robotium进行functiontesting,使用RoboLectric进行unit testing) 性能(DI框架使用reflection,哪个更快?)
所以我遇到了有关Android内存性能的最佳实践。 http://developer.android.com/training/articles/memory.html 他们说 避免dependency injection框架 使用Guice或RoboGuice等dependency injection框架可能会很有吸引力,因为它们可以简化您编写的代码,并提供适用于testing和其他configuration更改的自适应环境。 但是,这些框架往往会通过扫描代码来进行注释,从而执行大量的stream程初始化,即使您不需要,也可能需要将大量的代码映射到RAM中。 这些映射的页面被分配到干净的内存中,所以Android可以放弃它们,但是直到页面被长时间留在内存中才会发生。 但是他们自称是匕首的匕首呢? 不知道我应该去哪一个?
任何人都可以指出Dagger和Butterknife的区别吗? 我知道Butterknife是一个视图注入库和匕首是一个dependency injection库。 但网上的文件似乎有点我的开销。 根据Butterknife文档,你也可以做非活动注射,这是什么匕首呢? 还是我误解了一些东西? http://square.github.io/dagger/ http://jakewharton.github.io/butterknife/
Dagger 1的plus()方法是我在以前的应用程序中经常使用的东西,所以我理解您可能希望有一个子组件完全访问父图绑定的情况。 在什么情况下使用组件依赖而不是子组件依赖是有益的,为什么?
每当我做一个注入到一个kotlin类(顺便说一下,我有一个混合的Android项目与kotlin和Java),我在构build中得到这个笔记。 例如,在这个gradle任务之后: compileStagingDebugJavaWithJavac (StagingDebug是我的构build变体),我得到这个消息: “注意:为com.packageNameXXX.CourseDiscoveryMapFragment生成一个MembersInjector或Factory,而不是在该类上运行匕首处理器。” 我的CourseDiscoveryMapFragment代码可以在这里看到: class CourseDiscoveryMapFragment : Fragment(){ @Inject lateinit var presenter: CourseDiscoveryMapPresenter lateinit var mapView: MapView override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_discovery_map, container, false) MapsInitializer.initialize(activity) mapView = view.mapView mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE)) (activity as BaseActivity) .activityComponent.inject(this) } 而我的ActivityComponent是: @ActivityScope @Subcomponent(modules = ActivityModule.class) public interface ActivityComponent { void […]
如何使用匕首? 如何configurationDagger在我的Android项目中工作? 我想在我的Android项目中使用Dagger,但我觉得很困惑。 编辑:Dagger2自2015年5月15日也出来,它更令人困惑! [这个问题是一个“存根(stub)”,当我学习了更多关于Dagger1的内容并且学习了更多关于Dagger2的信息的时候,我将其添加到了我的答案中。 这个问题更多的是一个指导,而不是一个“问题”。]