¿Cómo usar las preferencias compartidas en MVP sin Dagger y no hacer que Presenter sea dependiente del contexto?

Estoy tratando de implementar MVP sin Dagger (con fines de aprendizaje). Pero llegué al problema: uso el patrón de repositorio para obtener datos en bruto, ya sea de caché (Preferencias compartidas) o de la red:

Shared Prefs| 
            |<->Repository<->Model<->Presenter<->View
     Network|

Pero para poner mis manos en Preferencias compartidas tengo que poner una línea como

presenter = new Presenter(getApplicationContext());

yo sueloonRetainCustomNonConfigurationInstance/getLastCustomNonConfigurationInstance emparejar para mantener el presentador "retenido".

public class MyActivity extends AppCompatActivity implements MvpView {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //...
        presenter = (MvpPresenter) getLastCustomNonConfigurationInstance();

        if(null == presenter){
            presenter = new Presenter(getApplicationContext());
        }

        presenter.attachView(this);
    }

    @Override
    public Object onRetainCustomNonConfigurationInstance() {
        return presenter;
    }

    //...
}

Entonces, ¿cómo usar las preferencias compartidas en MVP sin Dagger y no hacer que Presenter sea dependiente del contexto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta