将项目从 Guice 迁移到 Dagger

Migrating project from Guice to Dagger

我想在当前配置了 Guice 的项目中使用 Dagger。我对 DI 的概念还是很陌生,但我看到 Guice 和 Dagger 都使用 @Inject@Provides 符号。我对 @Module@Component 注释以及如何设置它们有一些了解,但我想知道 @Inject@Provides 是否基本上可以保留它们是?

例如,假设我在 Guice 中有这个:

public class ModuleA extends AbstractModule {

   @Inject
   public ModuleA() {
     ...
   }

   @Provides
   @Singleton
   protected InterfaceX() {
    ...
   }

}

假设还有一个组件等,下面的 dagger 实现是否可以同样工作?

@Module
public class ModuleA {

   @Inject
   public ModuleA() {
     ...
   }

   @Provides
   @Singleton
   protected InterfaceX() {
    ...
   }

}

让我感到困惑的一件事是 @Provides 在 Dagger 中用于将实现绑定到接口,我不确定这是否是它在 Guice 中的用途。 同样,我对此很陌生,因此非常感谢任何澄清。谢谢!

注意:没有使用过 Dagger,但可以在 Guice 方面进行说明。

Guice 中的@Provides 用于通知 Guice 注入器在构建时使用哪种方法创建请求的对象。 例如:class Parent 在 2 个子 classes Child1 和 Child2 中实现 现在您想要一个逻辑来定义何时注入 Child1 以及何时注入 child2。这个逻辑可以写在一个方法中,该方法可以成为 Parent class impl 的提供者。并声明此提供者方法,使用@Provides 注释

class Parent {}
class Child1 extends Parent {}
class child2 extends Parent {}

GuieModule {
    @Provides
    Parent getParent() {
    if(something)
        return new Child1();
    else 
        return new child2();
    }
}