Start here. This is the direct spoken answer to practice first.
Why this question matters
A declared dependency can provide configuration without proving that the target is ready or will remain available. Keeping reference, readiness, and runtime failure handling separate prevents fragile startup behavior.
WithReference gives a consumer configuration for finding or connecting to another resource, usually through a named connection string or service-discovery endpoint. It does not guarantee that the dependency is ready. WaitFor expresses a startup dependency and delays the consumer until the referenced resource reports usable readiness. Runtime failures still need timeouts and resilience after startup.