1 #ifndef SAUCE_INTERNAL_IMPLICIT_BINDINGS_H_
2 #define SAUCE_INTERNAL_IMPLICIT_BINDINGS_H_
7 #include <sauce/exceptions.h>
8 #include <sauce/injector.h>
9 #include <sauce/memory.h>
10 #include <sauce/provider.h>
11 #include <sauce/scopes.h>
12 #include <sauce/internal/resolved_binding.h>
13 #include <sauce/internal/binding.h>
14 #include <sauce/internal/bindings.h>
15 #include <sauce/internal/key.h>
20 class ImplicitBindings;
22 typedef Bindings<ImplicitBindings> Concrete;
24 template<
typename ImplicitInjection_>
27 typedef ImplicitInjection_ ImplicitInjection;
28 typedef typename ImplicitInjection::Dependency Dependency;
29 typedef typename ResolvedBinding<Dependency>::BindingPtr BindingPtr;
35 template<
typename Dependency>
39 typedef sauce::shared_ptr<ResolvedBinding<Dependency> > BindingPtr;
44 static BindingPtr
get(Concrete
const &, std::string
const name) {
59 template<
typename Dependency>
61 Concrete
const & bindings, std::string
const name)
const {
68 template<
typename Dependency>
69 std::vector<sauce::shared_ptr<ResolvedBinding<Dependency> > >
getModifyings(
70 Concrete
const &, std::string
const)
const {
71 return std::vector<sauce::shared_ptr<ResolvedBinding<Dependency> > >();
82 static BindingPtr
get(Concrete
const &, std::string
const name) {
83 if (name != unnamed()) {
94 template<
typename Prov
idedDependency,
typename Name>
98 typedef typename Traits::ImplicitInjection ImplicitInjection;
99 typedef typename Traits::Dependency Dependency;
100 typedef typename Traits::BindingPtr BindingPtr;
102 static BindingPtr
get(Concrete
const & bindings, std::string
const name) {
106 ProvidedBindingPtr providedBinding(bindings.getProvidingBinding<Normalized>(name));
107 BindingPtr binding(
new ImplicitInjection(providedBinding));
114 namespace i = ::sauce::internal;
118 #endif // SAUCE_INTERNAL_IMPLICIT_BINDINGS_H_
A binding for an acknowledged interface.
Definition: resolved_binding.h:20
The name of all statically unnamed dependencies.
Definition: named.h:17
static BindingPtr get(Concrete const &, std::string const name)
Attempt to supply an unknown providing Binding at injection time.
Definition: implicit_bindings.h:44
Wrap dependency requests with Named to choose one of several (statically) named alternatives.
Definition: named.h:12
Definition: implicit_bindings.h:25
Attempts to supply a Binding when the given Dependency is not found.
Definition: implicit_bindings.h:36
sauce::shared_ptr< ResolvedBinding< Dependency > > getProviding(Concrete const &bindings, std::string const name) const
Attempt to supply an unknown providing Binding at injection time.
Definition: implicit_bindings.h:60
An injection that provides the injector itself.
Definition: injector_binding.h:16
std::vector< sauce::shared_ptr< ResolvedBinding< Dependency > > > getModifyings(Concrete const &, std::string const) const
Attempt to supply unknown modifying Bindings at injection time.
Definition: implicit_bindings.h:69
Definition: injector.h:27
An interface for including custom factories in an Injector.
Definition: provider.h:15
Thrown when a binding cannot be found for the given interface.
Definition: exceptions.h:31
Attempts to supply a Binding when none is found for a dependency.
Definition: implicit_bindings.h:53