android - 关于dagger2的几个问题

浏览:34日期:2022-11-04

问题描述

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;}@Overrideprotected 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);}

问题解答

回答1:

你好 @PerActivity 是 dagger2 的自定义 Scope ,可以注解在 Component接口、Module的provide方法、构造器注解 @Inject的类 上面,用于实现 此 Scope 范围内的局部单例。请参考 https://blog.piasy.com//2016/...

回答2:

和注解叫什么名字无关 不管叫PerActivity还是ActivityScope. 他作用域是由你的Component本身由谁初始化决定的.比如你这个例子 的Component由Activity来build的 它作用域自然随该activity了

相关文章: