1. A method of making providers of a particular kind of data available to an application program, comprising the steps of: discovering whether one or more data providers are capable of providing the particular kind of data, wherein a discovered data provider is either a connected data provider or a virtual data provider; when a data provider capable of providing the particular kind of data is discovered and the discovered data provider is a virtual data provider, instantiating the virtual data provider; and when a data provider capable of providing the particular kind of data is discovered, making a data-provider handle for the discovered data provider available to the application program, with a common interface.