@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); }
和注解叫什么名字无关 不管叫PerActivity还是ActivityScope. 他作用域是由你的Component本身由谁初始化决定的.比如你这个例子 的Component由Activity来build的 它作用域自然随该activity了
你好 @PerActivity
是 dagger2
的自定义 Scope
,可以注解在 Component
接口、Module
的provide
方法、构造器注解 @Inject
的类 上面,用于实现 此 Scope
范围内的局部单例。
请参考 https://blog.piasy.com//2016/...