code: func NewWatchingSecretManager(kubeClient clientset.Interface) Manager {
  	listSecret := func(namespace string, opts metav1.ListOptions) (runtime.Object, error) {
  		return kubeClient.CoreV1().Secrets(namespace).List(opts)
  	}
  	watchSecret := func(namespace string, opts metav1.ListOptions) (watch.Interface, error) {
  		return kubeClient.CoreV1().Secrets(namespace).Watch(opts)
  	}
  	newSecret := func() runtime.Object {
  		return &v1.Secret{}
  	}
  	gr := corev1.Resource("secret")
  	return &secretManager{
  		manager: manager.NewWatchBasedManager(listSecret, watchSecret, newSecret, gr, getSecretNames),
  	}
  }
docs: // NewWatchingSecretManager creates a manager that keeps a cache of all secrets
  // necessary for registered pods.
  // It implements the following logic:
  // - whenever a pod is created or updated, we start inidvidual watches for all
  //   referenced objects that aren't referenced from other registered pods
  // - every GetObject() returns a value from local cache propagated via watches