Procyon|Docs
ComponentsResolving Components

Resolve Collections

Resolve all components assignable to an interface or type.

Use component.ResolveAll when a feature is extension-based and should run every registered implementation.

tasks.go
type Task interface {
	Run(context.Context) error
}

func RunTasks(ctx context.Context, container component.Container) error {
	tasks, err := component.ResolveAll[Task](ctx, container)
	if err != nil {
		return err
	}

	for _, task := range tasks {
		if err := task.Run(ctx); err != nil {
			return err
		}
	}

	return nil
}

Collections are useful for plugin-like application behavior:

  • command line runners
  • startup tasks
  • route contributors
  • configuration customizers
  • framework extensions

Keep collection items small and independent. A failing item should return an error that makes the failing component easy to identify.