MCPcopy Create free account
hub / github.com/codnect/procyon / Resolve

Method Resolve

component/container.go:296–345  ·  view source on GitHub ↗

Resolve retrieves a component instance by its name.

(ctx context.Context, name string)

Source from the content-addressed store, hash-verified

294
295// Resolve retrieves a component instance by its name.
296func (d *DefaultContainer) Resolve(ctx context.Context, name string) (any, error) {
297 if name == "" {
298 return nil, errors.New("empty name")
299 }
300
301 ctx = withCreationState(ctx)
302
303 candidate, ok := d.Singleton(name)
304 if ok {
305 return candidate, nil
306 }
307
308 def, defExists := d.Definition(name)
309 if !defExists {
310 return nil, ErrDefinitionNotFound
311 }
312
313 state := creationStateFromContext(ctx)
314
315 if def.IsSingleton() {
316 return d.createSingleton(ctx, def)
317 } else if def.IsPrototype() {
318 defer state.removeFromPreparation(name)
319 if err := state.putToPreparation(name); err != nil {
320 return nil, err
321 }
322
323 instance, err := d.createInstance(ctx, def)
324
325 if err != nil {
326 return nil, err
327 }
328
329 return instance, nil
330 }
331
332 scope, scopeExists := d.Scope(def.Scope())
333 if !scopeExists {
334 return nil, ErrScopeNotFound
335 }
336
337 return scope.Resolve(ctx, name, func(ctx context.Context) (any, error) {
338 defer state.removeFromPreparation(name)
339 if err := state.putToPreparation(name); err != nil {
340 return nil, err
341 }
342
343 return d.createInstance(ctx, def)
344 })
345}
346
347// ResolveType retrieves an instance of the specified type.
348func (d *DefaultContainer) ResolveType(ctx context.Context, typ reflect.Type) (any, error) {

Callers 6

ResolveTypeMethod · 0.95
ResolveAsMethod · 0.95
ResolveAllMethod · 0.95
resolveArgumentsMethod · 0.95

Calls 13

SingletonMethod · 0.95
DefinitionMethod · 0.95
createSingletonMethod · 0.95
createInstanceMethod · 0.95
ScopeMethod · 0.95
withCreationStateFunction · 0.85
creationStateFromContextFunction · 0.85
IsSingletonMethod · 0.80
IsPrototypeMethod · 0.80
removeFromPreparationMethod · 0.80
putToPreparationMethod · 0.80
ScopeMethod · 0.65

Tested by 2