Providers are highly customized solutions met to meet a
particular need that any existing provider, or other component, doesn't compare
up to. If developed with flexibility, custom providers can be very useful, not
only in the original application, but in an application framework as well. The
key object types that make up the provider are the abstract class, the derived
classes with the implementation-specific logic (for instance, connecting to a
database, text file, etc.), the configuration section, and a static class that
exposes the provider to the consumer. The abstract class is a key component,
because it makes all of the providers available to the static class. All of
the derived classes can implement their own functionality using the signature
of the abstract class, meaning using all of the abstract methods, properties,
and events. The configuration section informs the static class which provider
to use as the default. The static class exposes the default provider to the
consumer, being able to switch easily between providers because they all
inherit from the same abstract interface. In addition, custom controls can
wrap the functionality inside them, making any interface with the API a simple
dragging and dropping of the controls.