# Value Groups
A value group is a collection of values of the same type. Any number of constructors across an Fx application can feed values into a value group. Similarly, any number of consumers can read from a value group without knowing about the full list of producers.
TIP
Fx produces the values fed into a value group in a random order. Do not make any assumptions about value group ordering.
# Using value groups
To learn how to use value groups, see,
# Dependency strictness
Dependencies formed by value groups can be:
- strict: these are always consumed
- soft: these are consumed only if the corresponding constructor was requested elsewhere
By default, value group dependencies are strict.
# Strict value groups
Strict value group dependencies are consumed by the value group regardless of whether their producers are otherwise used by the application.
Suppose a constructor NewFoo
produces two values: A
and B
.
Value A
feeds into the value group []A
,
which is then consumed by function Run
,
and the application invokes function Run
with fx.Invoke
.
With strict value groups,
Fx will run NewFoo
to populate the []A
group
regardless of whether the application consumes the other result (B
)
directly or indirectly.
# Soft value groups
Soft value group dependencies are consumed by the value group only if the constructors that produce them were called by Fx anyway -- because the application consumes their other results directly or indirectly.
Suppose we have a setup similar to the previous section, except that the value group is soft.
With soft value groups,
Fx will run NewFoo
to populate the []A
group
only if A
or B
are consumed by another component in the application
directly or indirectly.