code: public <T> Navigator with(Class<T> type, Annotation qualifier, Preparer<T> preparer) throws MvcGraphException {
          T instance;
          try {
              instance = Mvc.graph().reference(type, qualifier);
          } catch (PokeException e) {
              throw new MvcGraphException(e.getMessage(), e);
          }
  
          if (preparer != null) {
              preparer.prepare(instance);
          }
  
          if (pendingReleaseInstances == null) {
              pendingReleaseInstances = new ArrayList<>();
          }
          PendingReleaseInstance pendingReleaseInstance = new PendingReleaseInstance();
          pendingReleaseInstance.instance = instance;
          pendingReleaseInstance.type = type;
          pendingReleaseInstance.qualifier = qualifier;
          pendingReleaseInstances.add(pendingReleaseInstance);
  
          return this;
      }
docs: Prepare the instance subject to being injected for the fragment being navigated to. It's an
  equivalent way to pass arguments to the next fragment.For example, when next fragment needs
  to have a pre set page title name, the controller referenced by the fragment can be prepared
  here and set the title in the controller's model. Then in the MvcFragment.onViewReady bind
  the value of the page title from the controller's model to the fragment.
  <p/>
  <p>Example:</p>
  To initialize the timer of a TimerFragment which counts down seconds,sets the initial value
  of its controller by this with method.
  <pre>
  class TimerFragment {
  @Inject
  TimerController timerController;
  }
  
  interface TimerController {
  void setInitialValue(long howManySeconds);
  }
  
  navigationManager.navigate(this).with(TimerController.class, null, new Preparer<TimerController>() {
  @Override
  public void prepare(TimerController instance) {
  long fiveMinutes = 60 * 5;
  instance.setInitialValue(fiveMinutes);
  
  //Then the value set to the controller will be guaranteed to be retained when
  //TimerFragment is ready to show
  }
  }).to(TimerFragment.class.getName());
  </pre>
  
  @param type      The class type of the instance needs to be prepared
  @param qualifier The qualifier
  @param preparer  The preparer in which the injected instance will be prepared
  @return This navigator
  @throws MvcGraphException Raised when the required injectable object cannot be injected