|  | @@ -6,13 +6,15 @@ import (
 | 
											
												
													
														|  |  	"reflect"
 |  |  	"reflect"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -type creator func(ctx context.Context, config interface{}) (interface{}, error)
 |  | 
 | 
											
												
													
														|  | 
 |  | +// ConfigCreator is a function to create an object by a config.
 | 
											
												
													
														|  | 
 |  | +type ConfigCreator func(ctx context.Context, config interface{}) (interface{}, error)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  var (
 |  |  var (
 | 
											
												
													
														|  | -	typeCreatorRegistry = make(map[reflect.Type]creator)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	typeCreatorRegistry = make(map[reflect.Type]ConfigCreator)
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func RegisterConfig(config interface{}, configCreator creator) error {
 |  | 
 | 
											
												
													
														|  | 
 |  | +// RegisterConfig registers a global config creator. The config can be nil but must have a type.
 | 
											
												
													
														|  | 
 |  | +func RegisterConfig(config interface{}, configCreator ConfigCreator) error {
 | 
											
												
													
														|  |  	configType := reflect.TypeOf(config)
 |  |  	configType := reflect.TypeOf(config)
 | 
											
												
													
														|  |  	if _, found := typeCreatorRegistry[configType]; found {
 |  |  	if _, found := typeCreatorRegistry[configType]; found {
 | 
											
												
													
														|  |  		return errors.New("Common: " + configType.Name() + " is already registered.")
 |  |  		return errors.New("Common: " + configType.Name() + " is already registered.")
 | 
											
										
											
												
													
														|  | @@ -21,6 +23,7 @@ func RegisterConfig(config interface{}, configCreator creator) error {
 | 
											
												
													
														|  |  	return nil
 |  |  	return nil
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +// CreateObject creates an object by its config. The config type must be registered through RegisterConfig().
 | 
											
												
													
														|  |  func CreateObject(ctx context.Context, config interface{}) (interface{}, error) {
 |  |  func CreateObject(ctx context.Context, config interface{}) (interface{}, error) {
 | 
											
												
													
														|  |  	configType := reflect.TypeOf(config)
 |  |  	configType := reflect.TypeOf(config)
 | 
											
												
													
														|  |  	creator, found := typeCreatorRegistry[configType]
 |  |  	creator, found := typeCreatorRegistry[configType]
 |