Dependency injection in Vue works by having a parent component provide a value with a key using the provide() function inside its setup. Child components can then request this value by calling inject() with the same key inside their setup. The process starts with the parent providing the value, then the child requesting it, receiving it, and finally using it in rendering. If the child tries to inject a key that the parent did not provide, it will get undefined. Also, provide does not automatically make values reactive; you must provide reactive objects explicitly. This pattern helps components share data without tight coupling.