code: func NewPVCProtectionController(pvcInformer coreinformers.PersistentVolumeClaimInformer, podInformer coreinformers.PodInformer, cl clientset.Interface, storageObjectInUseProtectionFeatureEnabled bool) *Controller {
  	e := &Controller{
  		client:                              cl,
  		queue:                               workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "pvcprotection"),
  		storageObjectInUseProtectionEnabled: storageObjectInUseProtectionFeatureEnabled,
  	}
  	if cl != nil && cl.CoreV1().RESTClient().GetRateLimiter() != nil {
  		metrics.RegisterMetricAndTrackRateLimiterUsage("persistentvolumeclaim_protection_controller", cl.CoreV1().RESTClient().GetRateLimiter())
  	}
  
  	e.pvcLister = pvcInformer.Lister()
  	e.pvcListerSynced = pvcInformer.Informer().HasSynced
  	pvcInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc: e.pvcAddedUpdated,
  		UpdateFunc: func(old, new interface{}) {
  			e.pvcAddedUpdated(new)
  		},
  	})
  
  	e.podLister = podInformer.Lister()
  	e.podListerSynced = podInformer.Informer().HasSynced
  	podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc: func(obj interface{}) {
  			e.podAddedDeletedUpdated(obj, false)
  		},
  		DeleteFunc: func(obj interface{}) {
  			e.podAddedDeletedUpdated(obj, true)
  		},
  		UpdateFunc: func(old, new interface{}) {
  			e.podAddedDeletedUpdated(new, false)
  		},
  	})
  
  	return e
  }
docs: // NewPVCProtectionController returns a new instance of PVCProtectionController.