im debating if its better for my team to learn dagger vs just using a singleton container that would provide the dependencies. this is how it was done in the 'old days'. I am dealing specifically with android and here is an example i found on the web of using a factory container for dependency injection:
public class Container {
private static Container instance;
private FavoriteAdder favoriteAdder;
private FavoriteRepo favoriteRepo;
private FavoritesGetter favoritesGetter;
private FavoriteRemover favoritesRemover;
private Container() {}
public static Container getInstance() {
    if (instance == null) {
        instance = new Container();
    }
    return instance;
}
public FavoriteAdder getFavoriteAdder() {
    if (favoriteAdder == null) {
        favoriteAdder = new FavoriteAdder(getFavoriteRepo());
    }
    return favoriteAdder;
}
public FavoritesGetter getFavoritesGetter() {
    if (favoritesGetter == null) {
        favoritesGetter = new FavoritesGetter(getFavoriteRepo());
    }
    return favoritesGetter;
}
public FavoriteRemover getFavoritesRemover() {
    if (favoritesRemover == null) {
        favoritesRemover = new FavoriteRemover(getFavoriteRepo());
    }
    return favoritesRemover;
}
public FavoriteRepo getFavoriteRepo() {
    if (favoriteRepo == null) {
        CachingFavoriteRepo inMemoryRepo = new InMemoryFavoriteRepo();
        FavoriteRepo remoteRepo = new SlowFavoriteRepoWrapper(new MockRemoteFavoriteRepo(), 1000);
        favoriteRepo = new FavoriteReadThroughCache(inMemoryRepo, remoteRepo);
    }
    return favoriteRepo;
}
}
and then to use it in an activity we can do this:
public class FavoriteActivity extends ActionBarActivity {
    private FavoriteAdder favoriteAdder = Container.getInstance().getFavoriteAdder();
    private FavoritesGetter favoritesGetter = Container.getInstance().getFavoritesGetter();
    private FavoriteRemover favoritesRemover = Container.getInstance().getFavoritesRemover();
    private FavoriteCrudPresenter presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            presenter = new FavoriteCrudPresenter(favoriteAdder, favoritesGetter, favoritesRemover, Schedulers.io(), AndroidSchedulers.mainThread(), backgroundExecutor, foregroundExecutor);
//...
}}
it seems easier then using dagger and im wondering what the benefits would be of dagger over this way ? Why do we even bother with dagger i guess its easier to make singletons in dagger could be one scenario.
