TelephonyManager
Daggerでサービスを注入しようとしています。私はこのサンプルに従っています。クラスを拡張してグラフを作成し、含まれる場所Application
を定義しました。将来、他のモジュールが含まれる予定です。ApplicationModule
ServiceModule
編集:
Activity
これで、システム サービスが問題なくに注入されました。の中に行方不明でしFinderApplication.inject(this)
たActivity
。インジェクションがありますが、 でのテストではまだインジェクションしませんRobolectric
。この投稿の最後にテスト ケースを追加しました。
Edit-2:
ApplicationModule
削除および作成BaseActivity
:
((FinderApplication) getApplication()).getGraph().inject(this);
オンonCreate
メソッド。私が得ているエラーは次のとおりです。
原因: java.lang.NoSuchMethodException: ServiceModule.()
しかし、空のコンストラクターを定義すると、注入されたクラスが必要なときに null ポインターが返されます。
FinderApplication.java
public class FinderApplication extends Application {
private ObjectGraph mObjectGraph;
@Override
public final void onCreate() {
super.onCreate();
mObjectGraph = ObjectGraph.create(new ServiceModule(this));
}
public final ObjectGraph getGraph() {
return mObjectGraph;
}
}
ServiceModule.java
@Module(entryPoints = { SimCardActivity.class, SimService.class })
public class ServiceModule {
private Context mContext;
public ServiceModule(Context context) {
mContext = context;
}
@Provides @Singleton
TelephonyManager provideTelephonyManager(){
return (TelephonyManager) mContext
.getSystemService(Context.TELEPHONY_SERVICE);
}
}
SimCardActivityTest.java
@RunWith(RobolectricTestRunner.class)
public class SimCardActivityTest {
@Before
public void setUp() throws Exception {
ObjectGraph.create(new TestModule()).inject(this);;
}
@Module(
includes = ServiceModule.class,
overrides = true,
entryPoints = {SimCardActivityTest.class, SimCardActivity.class}
)
static class TestModule{
public static TelephonyManager TELEPHONY_MANAGER =
Mockito.mock(TelephonyManager.class);
@Provides @Singleton
TelephonyManager provideTelephonyManager(){
return TELEPHONY_MANAGER;
}
}
}