@Override
  public void configure(Binder binder) {
    binder.disableCircularProxies();

    bindConfig(binder).to(LifeCycleConfig.class);

    binder.bindListener(
        any(),
        new TypeListener() {
          @Override
          public <T> void hear(TypeLiteral<T> type, TypeEncounter<T> encounter) {
            encounter.register(
                (InjectionListener<T>)
                    obj -> {
                      if (isLifeCycleClass(obj.getClass())) {
                        LifeCycleManager lifeCycleManager = lifeCycleManagerRef.get();
                        if (lifeCycleManager != null) {
                          try {
                            lifeCycleManager.addInstance(obj);
                          } catch (Exception e) {
                            throw new RuntimeException(e);
                          }
                        } else {
                          injectedInstances.add(obj);
                        }
                      }
                    });
          }
        });
  }
 @Override
 public void configure(final Binder binder) {
   // When a @I18NLocalized annotated type is injected, all members of the types are inspected to
   // find
   // the ones of I18NService type and @I18NMessageBundleService annotated; if it's the case, the
   // member is injected
   // with the bundle
   binder.bindListener(
       new I18NLocalizedTypeAnnotationMatcher(),
       new I18NMessageAnnotationGuiceHandler()); // @I18NMessageBundle annotation handling
 }
 @Override
 public void bindListener(
     Matcher<? super Binding<?>> bindingMatcher, ProvisionListener... listeners) {
   binder.bindListener(bindingMatcher, listeners);
 }