Another term of reference which might be of assistance is "Inversion of Control".
Rather than constructing your software with dependencies and assumptions about the libraries you will continue to use with that application forever, IoC or DI allow you to specify an interface which must be satisfied by some other component, then at runtime supply a mapping of interface-satisfying components for the executing application (usually in a service container which provides the IoC satisfying service as some variety of service-resolution service).
This abstraction allows you to more readily replace an implementation which no longer meets your organization's needs with a new version, or even an entirely new backing technology, with a smaller footprint of change and thus lower risk.
Castle Windsor is one .Net implementation of an IoC container.