私は短剣を使い始めています。かなり気に入っていますが、今はいくつかの困難に直面しています。私のシナリオは次のとおりです。アクティビティとその依存関係があります。依存関係がアクティビティに注入され、そのアクティビティへの参照が必要になります。ちょうどこのような:
public class MainActivity extends BaseActivity {
@Inject ScbeHelper scbeHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
}
public class ScbeHelper {
protected static final String TAG = "scbe_helper";
private BaseActivity activityContext;
@Inject
public ScbeHelper(BaseActivity context) {
this.activityContext = context;
}
}
アクティビティのグラフについては、github の短剣の例に従っています。そのため、プロジェクトで同様の構造を作成しました。まず、継承元のBaseActivity
クラス:MainActivity
public abstract class BaseActivity extends Activity {
private ObjectGraph activityGraph;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
protoApp application = (protoApp) getApplication();
// Exception happens in next line, inside plus() method
activityGraph = application.getApplicationGraph().plus(getModules().toArray());
// Inject ourselves so subclasses will have dependencies fulfilled when this method returns.
activityGraph.inject(this);
((protoApp)getApplication()).inject(this);
}
protected List<Object> getModules() {
return Arrays.<Object>asList(new ActivityModule(this));
}
public void inject(Object object) {
activityGraph.inject(object);
}
}
そしてモジュール:
@Module(injects={MainActivity.class})
public class ActivityModule {
private final BaseActivity activity;
public ActivityModule(BaseActivity activity) {
this.activity = activity;
}
@Provides @Singleton BaseActivity provideActivity() {
return activity;
}
}
さて、問題: No injectable members on com.example.proto.BaseActivity. Do you want to add an injectable constructor? required by public com.example.proto.ScbeHelper(com.example.proto.BaseActivity)
つまり、プロバイダー メソッドは何らかの理由でActivityModule.provideActivity()
のインスタンスを実際には提供しませんがBaseActivity
、私の理解では正しく設定されています。私のセットアップでエラーが表示される人はいますか? 私は短剣の論理に何か欠けていますか?
前もって感謝します!