6161 // The name will be used when reporting errors & results to specify the provider associated with them.
6262 namedProvider struct {
6363 of.FeatureProvider
64- name string
64+ name string
65+ extraHooks []of.Hook
6566 }
6667
6768 // Option function used for setting configuration via the options pattern
8081 customStrategy StrategyConstructor
8182 logger * slog.Logger
8283 hooks []of.Hook
83- providerHooks map [string ][]of.Hook
8484 providers []* namedProvider
8585 customComparator Comparator
8686 }
@@ -181,10 +181,10 @@ func WithGlobalHooks(hooks ...of.Hook) Option {
181181// are provided determines the order in which the providers are registered and evaluated.
182182func WithProvider (providerName string , provider of.FeatureProvider , hooks ... of.Hook ) Option {
183183 return func (conf * configuration ) {
184- conf .providerHooks [providerName ] = hooks
185184 conf .providers = append (conf .providers , & namedProvider {
186185 name : providerName ,
187186 FeatureProvider : provider ,
187+ extraHooks : hooks ,
188188 })
189189 }
190190}
@@ -210,9 +210,8 @@ func buildMetadata(m []NamedProvider) of.Metadata {
210210// NewProvider returns a new [multi.Provider] that acts as a unified interface of multiple providers for interaction.
211211func NewProvider (evaluationStrategy EvaluationStrategy , options ... Option ) (* Provider , error ) {
212212 config := & configuration {
213- logger : slog .New (slog .DiscardHandler ),
214- providerHooks : make (map [string ][]of.Hook ),
215- providers : make ([]* namedProvider , 0 , 2 ),
213+ logger : slog .New (slog .DiscardHandler ),
214+ providers : make ([]* namedProvider , 0 , 2 ),
216215 }
217216
218217 for _ , opt := range options {
@@ -235,16 +234,16 @@ func NewProvider(evaluationStrategy EvaluationStrategy, options ...Option) (*Pro
235234 }
236235
237236 // Wrap any providers that include hooks
238- if (len (provider .Hooks ()) + len (config . providerHooks [ provider .Name ()] )) == 0 {
237+ if (len (provider .Hooks ()) + len (provider .extraHooks )) == 0 {
239238 providers = append (providers , provider )
240239 continue
241240 }
242241
243242 var wrappedProvider NamedProvider
244243 if _ , ok := provider .FeatureProvider .(of.EventHandler ); ok {
245- wrappedProvider = isolateProviderWithEvents (provider , config . providerHooks [ provider .Name ()] )
244+ wrappedProvider = isolateProviderWithEvents (provider , provider .extraHooks )
246245 } else {
247- wrappedProvider = isolateProvider (provider , config . providerHooks [ provider .Name ()] )
246+ wrappedProvider = isolateProvider (provider , provider .extraHooks )
248247 }
249248
250249 providers = append (providers , wrappedProvider )
0 commit comments