Package dagger
Annotation Interface Component.Factory
- Enclosing class:
- Component
A factory for a component.
A factory is a type with a single method that returns a new component instance each time it is called. The parameters of that method allow the caller to provide the modules, dependencies and bound instances required by the component.
Components may have a single nested static abstract class or interface
annotated with @Component.Factory. If they do, then Dagger will generate a factory
class that will implement that type. Note that a component with a @Component.Factory
may not also have a @Component.Builder.
Factory types must follow some rules:
- There must be exactly one abstract method, which must return the component type or one of its supertypes.
- The method must have a parameter for each component dependency.
- The method must have a parameter for each non-
abstractmodule that has non-staticbinding methods, unless Dagger can instantiate that module with a visible no-argument constructor. - The method may have parameters for modules that Dagger can instantiate or does not need to instantiate.
- The method may have parameters annotated with
@BindsInstance. These parameters bind the instance passed for that parameter within the component. See@BindsInstancefor more information. - There may be non-
abstractmethods, but they are ignored as far as validation and factory generation are concerned.
Component with a Factory:
@Component(modules = {BackendModule.class, FrontendModule.class})
interface MyComponent {
MyWidget myWidget();
@Component.Factory
interface Factory {
MyComponent newMyComponent(
BackendModule bm, FrontendModule fm, @BindsInstance Foo foo);
}
}
For a root component, if a @Component.Factory is defined, the generated component
type will have a static method named factory() that returns an instance of that
factory.
- Since:
- 2.22