首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 使用dagger2进行依赖注入(基础篇)

前言 Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担, 本文主要介绍如何使用dagger2进行依赖注入。如果你不还不了解依赖注入,请看这一篇。 1....1.2 构建Injector 有了提供依赖的组件,我们还需要将依赖注入到需要的对象中。连接提供依赖和消费依赖对象的组件被称为Injector。dagger2中,我们将其称为component。...因为dagger2在编译时生成依赖注入的代码,会到inject方法的参数类型中寻找可以注入的对象,但是实际上这些对象存在于MainActivity,而不是Activity中。...至此,我们使用dagger实现了最简单的依赖注入。 2. 多层依赖 除了上面这种最简单的形式,dagger2还可以使用component作为component的依赖,实现多层级的依赖注入。...最后 本文试图用最简单的例子介绍Android中如何使用dagger2进行依赖注入,因此有很多dagger2的特性并未涉及,比如@Scope注释,以及dagger2自动生成代码的分析调试。

1.1K70

使用Dagger2做静态注入, 对比Guice.

Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢?...因为使用动态注入, 虽然写法简单了, 耦合也降低了, 但是带来了调试不方便, 反射性能差等一些缺点. 而Dagger跟Guice最大的差异在于, 他是编译期注入的, 而不是运行时....构建工程 既然Dagger是静态注入的, 那么他自然也跟其他动态注入框架工程有点区别, 编译时需要额外依赖dagger-compiler, dagger-producers等, 不过运行时的jar只需要...然后修改printjob构造函数中的注入....使用上跟Guice基本差不多, 各个注解概念也类似, 最大的区别就是非动态注入, 非反射实现, 而是编译期静态注入.

2.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Microsoft Fakes进行单元测试(2)

    接上一篇使用Microsoft Fakes进行单元测试(1) 下面进行Shim的演示。...2.使用Shim替换静态方法 假设我们需要一个工具方法用来格式化当前时间为字符串,因为DateTime.Now一直在变的所以我们需要隔离它,且DateTime是.NET内置的类型,所以我们根本不可能去修改它...简单的格式化一下然后返回。 在Tests项目下为System引用添加Fakes程序集 ? 使用Shim来完成测试: ? 运行测试: Ctrl+T+R ?...可以看到测试成功,说明MS Fakes成功的替换了DateTime.Now的值。这个真是屌炸天的! Shim还可以替换某个类的实例方法,请看下面。...3.使用Shim替换所有实例对象的方法 Students类: ? 测试方法: ? 4.使用Shim替换某个实例对象的方法 沿用上面的Student类 ?

    94790

    优雅的使用Go进行单元测试

    单测 2.1 调自己 在单元测试过程中,遇到了两个问题,第一个: func Target() { A() } func A() { // call rpc interface } 现在我们想测试...,发现要不断的mock 别人接口所依赖的其他接口,非常麻烦,通过注入代码或者后面第三种方式替换函数即可解决。...该命令中解释如下: destination表示生成的目标文件 package表示上述文件的包名 com.gcx表示mock的接口包名 Service表示接口名 使用gostub对proxy进行打桩,可以简单理解位用自己的替换代码中想...Return(&SerRsp{ // 填充字段 }, nil).AnyTimes() 2.3 monkey 使用monkey测试,算是最简单的一种方式了,不用自己去打桩,然后替换,也不用像方法1...一样进行主逻辑的函数注入,mock谁,我们就替换掉这个方法或者函数就行了,而mockey就是这么直接的。

    2.9K20

    依赖注入

    现在我们发现上面 1 中存在的两个问题都很好解决了,简单的说依赖注入主要有两个好处: (1). 解耦,将依赖之间解耦。 (2). 因为已经解耦,所以方便做单元测试,尤其是 Mock 测试。...Java 中的依赖注入 依赖注入的实现有多种途径,而在 Java 中,使用注解是最常用的。通过在字段的声明前添加 @Inject 注解进行标记,来实现依赖对象的自动注入。...实质上,如果你只是写了一个 @Inject 注解,Father 并不会被自动注入。你还需要使用一个依赖注入框架,并进行简单的配置。...现在 Java 语言中较流行的依赖注入框架有 Google Guice、Spring 等,而在 Android 上比较流行的有 RoboGuice、Dagger 等。...其中 Dagger 是我现在正在项目中使用的。如果感兴趣,你可以到 Dagger 实现原理解析 了解更多依赖注入和 Dagger 实现原理相关信息。

    1.3K20

    使用Angular CLI进行单元测试和E2E测试

    单元测试. angular cli使用karma进行单元测试. 首先执行ng test --help或者ng test -h查看帮助....而且它还会检测文件的变化, 如果文件有变化, 那么它会重新执行测试. 它应该在单独的终端进程中执行. ...我认为代码覆盖率这个内置功能是非常好的. Debug单元测试. 首先执行ng test: ? 然后点击debug, 并打开开发者工具: ? 然后按cmd+p: 找到需要调试的文件: ?...最后点击浏览器的刷新按钮即可: ? E2E测试的参数. 实际上angular cli是配合着protractor来进行这个测试的. 它的命令是 ng e2e....如果我想debug e2e, 那么执行这个命令: ng e2e -ee 由于我使用的是mac, 当前这个命令在mac上貌似确实有一个bug: ?

    2.8K70

    使用WebSocket在Server类中无法使用Autowired注解进行自动注入

    问题 在SpringBoot项目中使用WebSocket的过程中有其他的业务操作需要注入其它接口来做相应的业务操作,但是在WebSocket的Server类中使用Autowired注解无效,这样注入的对象就是空...,在使用过程中会报空指针异常。...注释:上面说的WebSocket的Server类就是指被@ServerEndpoint注解修饰的类 原因 原因就是在spring容器中管理的是单例的,他只会注入一次,而WebSocket是多对象的,当有新的用户使用的时候...,他就会新创建一个WebSocket对象,这就导致了用户创建的WebSocket对象都不能注入对象了,所以在运行的时候就会发生注入对象为null的情况; 主要的原因就是Spring容器管理的方式不能直接注入...WebSocket中的对象,所以需要调整一下注入方式。

    5.6K60

    如何对Spring MVC中的Controller进行单元测试

    对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。...如下将详细阐述如何使用MockMvc测试框架实现对“Spring Controller”进行单元测试,基于Spring Boot开发框架进行验证。 添加测试框架依赖: <!...: 方式1:明确指定需要测试的“Controller”类进行配置 方式2:基于Spring容器进行配置,包含了Spring MVC环境和所有“Controller”类,通常使用这种方式。...: 1.使用JUnit提供的Assert断言工具判断返回结果,这是一种非常普遍和常见的方式 2.在MockMvc框架中可以通过andExpect()方法定义一个或多个预期结果,当其中一个期望结果断言失败时...写在最后 使用Spring提供的测试框架MockMvc可以非常方便地实现对HTTP服务接口进行单元测试,不要把基础的功能验证工作都交给测试童鞋,应该通过单元测试来保证代码迭代的稳定性。

    2.3K30

    ASP.NET Core中的依赖注入(2):依赖注入(DI)

    注册到后者使用的DI容器上。...从服务使用的角度来讲,我们借助于一个服务接口对消费的服务进行抽象,那么服务消费程序针对具体服务类型的依赖可以转移到对服务接口的依赖上。但是在运行时提供给消费者总是一个针对某个具体服务类型的对象。...从编程的角度来讲,类型中的字段或者属性是依赖的一种主要体现形式,如果类型A中具有一个B类型的字段或者属性,那么A就对B产生了依赖。...构造器注入 构造器注入就在在构造函数中借助参数将依赖的对象注入到创建的对象之中。...定义在Foo中的属性Bar和Baz,以及定义在Baz中的属性Qux是三个需要自动注入的依赖属性,我们采用的注入方式分别是构造器注入、属性注入和方法注入。

    2.1K80

    Android 中构建快速可靠的 UI 测试

    在这篇文章中,我们会探索如何使用Mockito(译者注:Mockito是java编写的一个单元测试框架),Dagger 2 去创建快速可靠的Android UI测试。...它主要应用于编写单元测试,但在UI测试中也会非常有用。你可以参照不同的方法去模拟java对象但使用Mockito 确实是一个简单有效的解决方案。...使用Dagger注入模拟的DataManager Using Dagger to inject a mock DataManager 一旦我们明确了需要模拟什么对象,那么接下来就该考虑在测试中如何替换真实的对象...我们通过Dagger2 解决这个问题(一个Android中的依赖注入框架),如果你还没有接触过Dagger ,在继续阅读下去之前我建议你阅读使用Dagger2 进行依赖注入【英】 。...2调用基类的Statement 的evaluate()方法(这是在test的时候执行) 3 设置Application的component字段为空,也就让其恢复到初始状态。

    93410

    【Dev Club 分享】安卓单元测试:What, Why and How

    Dagger、Dagger2等等。...关于Dagger2的文章,目前网上很多,相信大家也看过不少,但是好像我并没有看到讲述没有关于如何在测试环境下使用Dagger2的文章,这个还是略感遗憾的。...虽然说本身就是一个非常优秀的设计,而不仅仅是为了单元测试,但离开单元测试,使用依赖注入就少了很有说服力的一个理由。 那么这里我就介绍一下,怎么样把Dagger2应用到单元测试中。...熟悉dagger2的童靴可能知道,Dagger2里面最关键的有两个概念,Module 和Component。Module是负责生成诸如DataModel这样的Dependency的地方。...关于Dagger2的介绍和使用,以及在单元测试中的运用,大家可以参考这篇文章。

    1.4K60

    每个开发者都应该懂一点单元测试

    衡量单元测试质量,通过覆盖率测试,可以明确知道哪部分代码已经被单元测试覆盖到,哪部分没有进行单元测试;常用的单元测试插件有Emma、JaCoCo; 4 JUnit框架中的常用方法 setUp...7 依赖注入在单元测试中的使用 上文中提到的Mock技术就是创建一个类的虚假的对象,在测试环境中用来替换掉真实的对象,但如何在测试环境下,将某个类替换成Mock的对象就需要使用到依赖注入了...这种模式应用是非常广泛的,尤其是在测试的时候。常见的依赖注入框架有:Roboguice、Dagger、Dagger2。   ...在实际写单元测试的过程中,Mock技术会经常用到,所有非常有必要熟悉其中一种依赖注入框架,关于依赖注入的详细解释可以参见公共技术点之依赖注入。...(五):依赖注入,将mock方便的用起来 Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用 Android单元测试(七):Robolectric,在JVM上调用安卓的类

    94130

    VS2010中使用CLR单元测试框架进行C++测试

    上篇博文中使用VS2013提供的C++本地测试框架进行测试,在VS2010中没有提供这样的功能,但是我们可以使用.NET单元测试框架。 首先创建一个C++项目。...在生成的测试项目上右键属性->配置属性->常规->公共语言运行时支持,选择公共语言运行时支持(/clr)。 C/C++->附加包含目录,添加前面C++项目中的头文件所在目录。...连接器->常规->附加库目录,添加前面C++项目中生成的的lib文件所在目录,即解决方案文件下的Debug目录。 连接器->输入->附加依赖项,添加lib文件。...: // //在运行类中的第一个测试之前,使用 ClassInitialize 来运行代码 //[ClassInitialize()] //static void MyClassInitialize...(TestContext^ testContext) {}; // //在类中的所有测试都已运行之后,使用 ClassCleanup 来运行代码 //[ClassCleanup()] /

    1.2K50

    面试中碰到的坑之注入系列(2)

    或者自定义一个check_sql函数对select union关键字进行过滤。 这类的防御比较简单,但是字符型的防注入就比较麻烦了。...00x2 防止字符型型sql注入 Mysql防注入转义: 1.魔术引号开启 Php.ini文件中 magic_quote_gpc=on 开启 2.函数限制 addslashes...我们这里的宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)。首先模仿phithon牛的代码。...也一样可以的,这些应该是还没用到的GBK编码表 ? concat是一个字符串连接函数,我们连接两个字段进行查询。 ? gb2312和gbk应该都是宽字节家族的一员,但是gb2312是无法注入的。...所以,0x5c根本不是gb2312中的编码,所以自然也是不会被吃掉的 除了gbk以外,所有ANSI编码都是2个字节。

    1.2K50
    领券