A C++ dependency injection framework. The design and name are inspired by Google's excellent Guice framework, but neither Google nor Guice is otherwise affiliated in any way. In Sauce, one defines bindings that map interface types to implementation types. Each binding is declared in the context of a module which is used to organize and refer to collections of bindings at a time. Modules may be function pointers, or classes providing a certain operator(). Groups of modules may be used together, to avoid duplicate bindings. At runtime, one collects desired modules into a modules object, which produces injectors. One can then ask an injector to provide a value (instance) of a desired type (again supplied as a template parameter.) When providing a value, implicit transitive dependencies are provided as well. All values are exchanged with shared pointers ((std|std::tr1|boost)::shared_ptrs are supported) and the injector takes care of disposing the value when the smart pointer deletes itself. Requesting the injector for an unbound type results in a runtime exception. No RTTI is used (but we use a portable, homebrew version of same.)