code: func NewFramework(r Registry, _ *runtime.Unknown) (Framework, error) {
  	f := &framework{
  		registry:         r,
  		nodeInfoSnapshot: cache.NewNodeInfoSnapshot(),
  		plugins:          make(map[string]Plugin),
  	}
  
  	// TODO: The framework needs to read the scheduler config and initialize only
  	// needed plugins. In this initial version of the code, we initialize all.
  	for name, factory := range r {
  		// TODO: 'nil' should be replaced by plugin config.
  		p, err := factory(nil, f)
  		if err != nil {
  			return nil, fmt.Errorf("error initializing plugin %v: %v", name, err)
  		}
  		f.plugins[name] = p
  
  		// TODO: For now, we assume any plugins that implements an extension
  		// point wants to be called at that extension point. We should change this
  		// later and add these plugins based on the configuration.
  		if rp, ok := p.(ReservePlugin); ok {
  			f.reservePlugins = append(f.reservePlugins, rp)
  		}
  		if pp, ok := p.(PrebindPlugin); ok {
  			f.prebindPlugins = append(f.prebindPlugins, pp)
  		}
  	}
  	return f, nil
  }
docs: // NewFramework initializes plugins given the configuration and the registry.