子组件与组件依赖关系

j2datikz  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(442)

我读到了 SubComponents 以及 Component Dependencies 从这个文档https://google.github.io/dagger/api/latest/dagger/component.html 阅读这篇文章,也就是匕首2子组件和组件依赖关系
有谁能举例说明这句话的意思吗。
子组件可以使用其祖先组件和子组件定义的任何绑定。或者,组件只能通过声明组件依赖关系来使用来自另一个组件接口的绑定。当一个类型用作组件依赖项时,依赖项上的每个provision方法都被绑定为提供程序。请注意,只有作为提供方法公开的绑定可以通过组件依赖关系使用。

dgsult0t

dgsult0t1#

把它看作一个子组件,比如java SubComponent extends ParentComponent 一切都在哪里 protected . 它将访问与父对象相同的成员,并且可以使用所有父对象。
另一方面,组件依赖关系类似于委托对象,您只能访问类公开的公共方法。
假设我们有两个dagger可以创建和提供的类。不管这是什么。不管您是使用构造函数注入还是从模块中创建对象……我们只是假设我们有这两个类,它们可以由某些人提供 BaseComponent ,我将在下面展示。

// some module can create either object
class ComponentPrivateObject {}
class ExposedObject {}

他们来自哪里并不重要。下一部分是有趣的部分。我们将其中一个类声明为组件接口上方法的返回类型。这就是dagger所称的供应方法。它说这个组件可以提供这个类。

@Component(modules=/* some modules */)
class BaseComponent {

  // BaseComponent can provide ExposedObject!
  ExposedObject exposedObject();

}

子组件和依赖组件之间的区别在于,与前面的java示例一样, Subcomponent 可以同时使用 ComponentPrivateObject 以及 ExposedObject 因为它只是扩展了父图。

// can use either class, it just adds to the parent
@Subcomponent
class Subcomponent {}

另一方面, DependentComponent 只能访问 ExposedObject . 它不扩展 BaseComponent ,但它只是束缚 BaseComponent 作为某些对象的提供者。就像上面的java示例一样,它就像使用它的公共api,如果您尝试使用 ComponentPrivateObject 匕首会告诉你不能提供。。。

// binds component dependency as provider
@Component(dependency=BaseComponent.class)
class DependentComponent{}

一个扩展父级,另一个使用其公共api。

相关问题