25 lines
1.1 KiB
Plaintext
25 lines
1.1 KiB
Plaintext
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.)
|