code: func NewPVProtectionController(pvInformer coreinformers.PersistentVolumeInformer, cl clientset.Interface, storageObjectInUseProtectionFeatureEnabled bool) *Controller {
  	e := &Controller{
  		client:                              cl,
  		queue:                               workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "pvprotection"),
  		storageObjectInUseProtectionEnabled: storageObjectInUseProtectionFeatureEnabled,
  	}
  	if cl != nil && cl.CoreV1().RESTClient().GetRateLimiter() != nil {
  		metrics.RegisterMetricAndTrackRateLimiterUsage("persistentvolume_protection_controller", cl.CoreV1().RESTClient().GetRateLimiter())
  	}
  
  	e.pvLister = pvInformer.Lister()
  	e.pvListerSynced = pvInformer.Informer().HasSynced
  	pvInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc: e.pvAddedUpdated,
  		UpdateFunc: func(old, new interface{}) {
  			e.pvAddedUpdated(new)
  		},
  	})
  
  	return e
  }
docs: // NewPVProtectionController returns a new *Controller.