createSingleton constructs a singleton instance and registers it in the container. It also handles circular dependency protection via preparation state.
(ctx context.Context, def *Definition)
| 527 | // createSingleton constructs a singleton instance and registers it in the container. |
| 528 | // It also handles circular dependency protection via preparation state. |
| 529 | func (d *DefaultContainer) createSingleton(ctx context.Context, def *Definition) (any, error) { |
| 530 | name := def.Name() |
| 531 | |
| 532 | defer d.singletonState.removeFromPreparation(name) |
| 533 | if err := d.singletonState.putToPreparation(name); err != nil { |
| 534 | return nil, err |
| 535 | } |
| 536 | |
| 537 | instance, err := d.createInstance(ctx, def) |
| 538 | if err != nil { |
| 539 | return nil, err |
| 540 | } |
| 541 | |
| 542 | err = d.RegisterSingleton(name, instance) |
| 543 | if err != nil { |
| 544 | return nil, err |
| 545 | } |
| 546 | |
| 547 | return instance, nil |
| 548 | } |
| 549 | |
| 550 | // resolveArguments resolves the constructor arguments required to instantiate a component. |
| 551 | func (d *DefaultContainer) resolveArguments(ctx context.Context, args []Arg) ([]any, error) { |
no test coverage detected