Scope:@PerActivity 这个注解是怎么起作用的呢?
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {
}
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
void inject(MainActivity mainActivity);
}
public ActivityComponent getActivityComponent() {
if (activityComponent == null) {
activityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule(this))
.applicationComponent(DemoApplication.get(this).getComponent())
.build();
}
return activityComponent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActivityComponent().inject(this);
mTvUserInfo = (TextView) findViewById(R.id.tv_user_info);
mTvAccessToken = (TextView) findViewById(R.id.tv_access_token);
}
Bonjour
@PerActivity
est undagger2
personnalisé deScope
, qui peut être annoté sur l'interfaceComponent
, la méthodeModule
deprovide
et la classe avec l'annotation de constructeur@Inject
à implémenter ceScope
Singleton local dans la portée.Veuillez vous référer à https://blog.piasy.com//2016/...
Cela n'a rien à voir avec le nom de l'annotation, qu'elle s'appelle PerActivity ou ActivityScope. Sa portée est déterminée par la personne qui initialise votre composant lui-même. Par exemple, si le composant de votre exemple est construit par Activity, sa portée. suivra naturellement cette activité