我開始使用匕首,喜歡它好看多了,但現在面臨一些困難。我的場景如下:有一個活動和一個依賴項。依賴項被注入到活動中,並需要參考該活動。就像這樣:活動圖形和非依賴發現
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;
}
}
我下面dagger's example from the 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
實例,雖然在我的理解它的設置正確。有人在我的設置中看到錯誤嗎?我在匕首的邏輯中遺漏了什麼?
在此先感謝!
我忘了說我爲什麼刪除了您的活動應用程序級別的圖形:其實你的活動是不是一個入口點到AndroidModule,只能到ActivityModule,因此你不能用這個圖注它,只有活動級圖 – mrlem