Android 使用Dagger2提供依赖项
我使用了一个包装Google地图的(假的例子来简化问题,但本质没有改变),比如GoogleMap的decorator,以及添加、删除标记等的MarkerManager //库Android 使用Dagger2提供依赖项,android,google-maps,dependency-injection,dagger-2,Android,Google Maps,Dependency Injection,Dagger 2,我使用了一个包装Google地图的(假的例子来简化问题,但本质没有改变),比如GoogleMap的decorator,以及添加、删除标记等的MarkerManager //库 import com.google.android.gms.maps.GoogleMap; public class DelegatingGoogleMap { GoogleMap map; MarkerManager manager; public class DelegatingGoo
import com.google.android.gms.maps.GoogleMap;
public class DelegatingGoogleMap {
GoogleMap map;
MarkerManager manager;
public class DelegatingGoogleMap(GoogleMap map){
this.map = map;
this.manager = new MarkerManager(map);
}
}
import com.google.android.gms.maps.GoogleMap;
public class MarkerManager {
public class GoogleMap map;
public class MarkerManager(GoogleMap map) {
this.map = map;
}
}
在应用程序中,我想使用自己的MarkerManager的
//应用程序
public class MarkerManagerExtended extends MarkerManager {
public class MarkerManager(GoogleMap map) {
super(map);
}
}
所以我想使用Dagger 2来注入MarkerManager以删除GoogleMap(属性注入)
不确定,在这种情况下使用匕首是个好主意
问题是,在模块中
要提供MarkerManager扩展的实例
我必须将com.google.android.gms.maps.GoogleMap传递给构造函数
@Module
public class MapModule {
@Provides
public MarkerManager providesMarkerManager() {
return new MarkerManagerExtended(map); //map instance of com.google.android.gms.maps.GoogleMap
}
}
获取GoogleMaps看起来并不容易,所以我不确定是否应该在模块中编写它
public class MapFragment extends com.google.android.gms.maps.SupportMapFragment {
GoogleMap map;
public void getMapAsync(final OnMapReadyCallback callback) {
if (map != null) {
callback.onMapReady(map);
} else {
getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap realMap) {
map = realMap;
callback.onMapReady(map);
}
});
}
}
}
FragmentManager fm = getChildFragmentManager();
mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
你知道如何将MarkerManager注入DelegatingGoogleMap吗?你是如何解决这个问题的?你能解释一下你是否解决了这个问题吗?
public class MapFragment extends com.google.android.gms.maps.SupportMapFragment {
GoogleMap map;
public void getMapAsync(final OnMapReadyCallback callback) {
if (map != null) {
callback.onMapReady(map);
} else {
getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap realMap) {
map = realMap;
callback.onMapReady(map);
}
});
}
}
}
FragmentManager fm = getChildFragmentManager();
mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map);