code: func (a *AdmissionOptions) ApplyTo(
  	c *server.Config,
  	informers informers.SharedInformerFactory,
  	kubeAPIServerClientConfig *rest.Config,
  	pluginInitializers ...admission.PluginInitializer,
  ) error {
  	if a == nil {
  		return nil
  	}
  
  	// Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig.
  	if informers == nil {
  		return fmt.Errorf("admission depends on a Kubernetes core API shared informer, it cannot be nil")
  	}
  
  	pluginNames := a.enabledPluginNames()
  
  	pluginsConfigProvider, err := admission.ReadAdmissionConfiguration(pluginNames, a.ConfigFile, configScheme)
  	if err != nil {
  		return fmt.Errorf("failed to read plugin config: %v", err)
  	}
  
  	clientset, err := kubernetes.NewForConfig(kubeAPIServerClientConfig)
  	if err != nil {
  		return err
  	}
  	genericInitializer := initializer.New(clientset, informers, c.Authorization.Authorizer)
  	initializersChain := admission.PluginInitializers{}
  	pluginInitializers = append(pluginInitializers, genericInitializer)
  	initializersChain = append(initializersChain, pluginInitializers...)
  
  	admissionChain, err := a.Plugins.NewFromPlugins(pluginNames, pluginsConfigProvider, initializersChain, a.Decorators)
  	if err != nil {
  		return err
  	}
  
  	c.AdmissionControl = admissionmetrics.WithStepMetrics(admissionChain)
  	return nil
  }
docs: // ApplyTo adds the admission chain to the server configuration.
  // In case admission plugin names were not provided by a custer-admin they will be prepared from the recommended/default values.
  // In addition the method lazily initializes a generic plugin that is appended to the list of pluginInitializers
  // note this method uses:
  //  genericconfig.Authorizer