将项目从 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();
}
}
我想在当前配置了 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();
}
}