android - How to inject same Dagger 2 dependency with different implementations based on the Context? -
i have dagger 2 dependency provided differently if it’s activity or other context instance (e.g., service). both refer same interface implementation varies. how organise using dagger 2?
right now, i’m trying 2 different components, activitycomponent , contextcomponent respective modules follows:
@activityscope @subcomponent( modules = { activitymodule.class, contextmodule.class }) public interface activitycomponent { } @module public class activitymodule { @provides @myactivityqualifier public myobject providemyobject() { } } @contextscope @subcomponent( modules = { contextmodule.class }) public interface contextcomponent { } @module public class contextmodule.class { @provides public myobject providemyobject() { } } then, if i’m using myobject in activity, have add qualifier follows:
@inject @myactivityqualifier myobject myobject; this feels wrong i’m not sure why. there better way?
you using subcomponents.
question is: can or should both objects "visible" (usable, injectable, ...) @ same time?
- yes: will have use sort of qualifier. or else can't distinguish them.
- no: can "hide" them not exposing dependency dependent component. have use normal component instead of
@subcomponentin case, , don't addgetmyinterface()method parent component.
and there aren't other options, because have 2 components dependent on each other. approach looks fine information provide.
note can qualify one of implementations. in project, use qualified @named("public") annotation common implementation without user data. if don't add qualifier other 1 (unqualified).
with independent components, e.g. activityacomponent , activitybcomponent switch implementation gets provided using different modules.
Comments
Post a Comment