As part of the ABCs of WCF, a Binding is a critical part of the developer-facing API. Fundamentally, a Binding is a factory object that creates channel factory stacks and channel listener stacks. As such, a Binding is a developer-facing type that allows the developer to influence the composition of the channel layer. A Binding creates a collection of BindingElement objects, and each BindingElement in the collection begins the actual work of building channel factory stacks and channel listener stacks. Unlike channel factory stacks, channel listener stacks, and channel stacks, a BindingElement in the BindingElement collection has no knowledge of the other BindingElement objects in the collection. As a result, building channel factory stacks and channel listener stacks in an orderly manner requires another type. The BindingContext type serves this purpose. In essence, when a BindingElement builds a channel factory stack or a channel listener stack, it delegates some of the responsibility to a BindingContext object. Because a BindingContext object maintains a consumable collection of BindingElement objects, a BindingContext object is able to build channel factory stacks and channel listener stacks in an orderly manner.