Dependency injection allows a client the flexibility of being configurable. Only the client's behavior is fixed. The client may act on anything that supports the intrinsic interface the client expects.[22] Dependency injection can be used to externalize a system's configuration details into configuration files, allowing the system to be reconfigured without recompilation.