我从此文档中阅读了 SubComponents
和 Component Dependency
之间的区别 https://google.github.io/dagger/api/latest/dagger/Component.html并阅读此线程Dagger 2 subcomponents vs component dependencies
任何人都可以通过示例帮助我了解这行代码的含义。
SubComponents may use any binding defined by their ancestor component and subcomponents. as an alternative, components can use bindings only from another component interface by declaring a component dependency. When a type is used as a component dependency, each provision method on the dependency is bound as a provider. Note that only the bindings exposed as provision methods are available through component dependencies.
最佳答案
将其视为一个子组件,例如 java SubComponent 扩展 ParentComponent
,其中所有内容都受到保护
。它将有权访问与父级相同的成员,并且只能使用父级的所有内容。
另一方面,组件依赖关系就像委托(delegate)对象,您只能访问该类公开的公共(public)方法。
<小时/>假设我们有 2 个 Dagger 可以创建和提供的类。不管这可能是什么。如果您使用构造函数注入(inject)或从模块创建对象并不重要...我们只是假设我们有这两个类可以由某些 BaseComponent
提供,我将在接下来展示。
// some module can create either object
class ComponentPrivateObject {}
class ExposedObject {}
他们来自哪里并不重要。下一部分是有趣的部分。我们将这些类中的一个声明为组件接口(interface)上方法的返回类型。这就是 Dagger 所说的“配置方法”。它表示该组件可以提供该类。
@Component(modules=/* some modules */)
class BaseComponent {
// BaseComponent can provide ExposedObject!
ExposedObject exposedObject();
}
子组件和依赖组件之间的区别在于,与开头的 java 示例一样,Subcomponent
将有权访问 ComponentPrivateObject
和 ExposedObject
code> 因为它只是扩展父图。
// can use either class, it just adds to the parent
@Subcomponent
class Subcomponent {}
另一方面,DependentComponent
只能访问ExposedObject
。它不会扩展 BaseComponent
的图,但它只是将 BaseComponent
绑定(bind)为某些对象的提供者。与上面的 java 示例一样,它就像使用其公共(public) API,如果您尝试使用 ComponentPrivateObject
,Dagger 会告诉您它无法提供...
// binds component dependency as provider
@Component(dependency=BaseComponent.class)
class DependentComponent{}
一个扩展父级,另一个使用其公共(public) API。
关于java - 子组件与组件依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042273/