gpt4 book ai didi

android - 使用 Dagger 2 的 Activity 场注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:44 26 4
gpt4 key购买 nike

在 Dagger2 中使用 Constructor Injection 时,我真的可以看到依赖注入(inject)的概念是如何实现的:

 public class Dependent {

@Inject
public Dependent(Dependency dependency) {
// We're dependent on an instance of the Dependency class
// but we don't care who provides it
}

}

但是当涉及到 Activity 时, 因为 Android 正在为我们实例化它,所以我们需要使用 Field Injection 来满足我们的依赖关系。我在网上找到的所有示例都表明是这样的:

  1. 创建 @Module类来提供我们的依赖。
  2. 创建 @Component接口(interface)并调用生成构建器来实例化它。大多数示例在 Application 中执行此操作类并将引用保存为成员。
  3. 在我们的 Activity - 创建我们的 @Inject字段,并在 onCreate(..)方法,获取对 Component 的引用来 self 们的 Application并开始注入(inject)。

我对这种方法的问题是它感觉松耦合,而这正是我们正在努力实现的。

 public class DependentActivity extends Activity {

@Inject Dependency mDependency;

public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApplication) getApplication()).getComponent().inject(this);

// We're dependent on an instance of dependency
// but now we not only know who provides it,
// we explicitly initiate the injection
}

}

我错过了什么?

最佳答案

是的,您启动了注入(inject),但您不必知道它来自哪里(意味着对象是如何创建的,或者您是如何获得它的)。您可以切换您的应用程序为您提供的组件类,并且您的 Activity 不会改变。您可以关闭提供依赖对象的模块,而您的 Activity 中的任何内容都不会改变。这种注入(inject)给你的是让你的 Activity 只处理使用注入(inject)的对象的能力。通常在没有依赖注入(inject)的情况下,您的 Activity 必须了解如何实例化它、如何根据需要对其进行初始化以及如何使用它。这使您可以轻松地换入和换出组件、更改其初始化方式或其他任何操作,并且您的 Activity (理想情况下)不必更改任何东西。

关于android - 使用 Dagger 2 的 Activity 场注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250433/

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