@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);
}
大家讲道理2017-04-18 09:20:13
Hello@PerActivity
は dagger2
のカスタム Scope
であり、Component
インターフェース、Module
の provide
メソッド、および実装するコンストラクター アノテーション @Inject
を持つクラスにアノテーションを付けることができます。この Scope
スコープ内のローカル シングルトン。
https://blog.piasy.com//2016/...を参照してください
PHP中文网2017-04-18 09:20:13
それが PerActivity と呼ばれるか、ActivityScope と呼ばれるかに関係なく、そのスコープは、コンポーネント自体を初期化する人によって決まります。たとえば、例のコンポーネントがアクティビティによって構築されている場合、そのスコープは決まります。自然にそのアクティビティに従います