gpt4 book ai didi

android - 如何在方法中注入(inject)依赖项?

转载 作者:行者123 更新时间:2023-11-29 20:46:44 28 4
gpt4 key购买 nike

我是依赖注入(inject)的初学者..特别是 Dagger 2。我想弄清楚我是否/如何做这样的事情:

@Inject
public void someMethodName(int someInteger, SomeObject dependency){
// do something with the dependency.
}

或者我是否需要将该依赖项作为类变量放入?对此的任何帮助将不胜感激。同样在这种情况下,变量 someInteger 不是依赖项,而是由调用者添加的……这有关系吗?

我可以这样调用它吗:

this.someMethodName(5); 

android studio 不喜欢上面的调用方法(我假设是因为我做错了什么)

最佳答案

  1. 您需要创建由@Component 注释的组件。
  2. 组件接受提供依赖项的模块。
  3. 您创建的每个组件的名称都以 Dagger 前缀开头,例如对于 MyComponent。

让我们看下面的例子:

    @Singleton
@Component(modules = DemoApplicationModule.class)
public interface ApplicationComponent {
void inject(DemoApplication application);
}

我们使用单注入(inject)方法创建了 ApplicationComponent。我们的意思是我们想在 DemoApplication 中注入(inject)某些依赖项。

此外,在 @Component 注释中,我们指定带有提供方法的模块。

这就像我们的模块看起来像:

@Module
public class DemoApplicationModule {
private final Application application;

public DemoApplicationModule(Application application) {
this.application = application;
}

@Provides @Singleton SomeIntegerHandler provideIntegerHandler() {
return new MySomeIntegerHandlerImpl();
}
}

我们通过创建 DemoApplicationModule 的意思是,该模块可以在我们的组件指定的注入(inject)位置提供所需的依赖项。

 public class DemoApplication extends Application {
private ApplicationComponent applicationComponent;

@Inject SomeIntegerHandler handler;

@Override public void onCreate() {
super.onCreate();
applicationComponent = DaggerApplicationComponent.builder()
.demoApplicationModule(new DemoApplicationModule(this))
.build();
applicationComponent.inject(this);
handler.someMethodName(5);
}
}

请参阅文档了解您可以获得哪些依赖项。除了仅获取原始实例之外,您还可以获得 Provider, FactoryLazy实例。 http://google.github.io/dagger/api/latest/dagger/Component.html

您还可以创建作用域依赖,其生命周期取决于注入(inject)位置的生命周期,例如Activities or Fragments。 .

希望我给了你 Dagger 是什么的基本概念。

关于android - 如何在方法中注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com