1 #ifndef SAUCE_INTERNAL_IMPLICIT_PROVIDER_BINDING_H_
2 #define SAUCE_INTERNAL_IMPLICIT_PROVIDER_BINDING_H_
6 #include <sauce/injector.h>
7 #include <sauce/memory.h>
8 #include <sauce/named.h>
9 #include <sauce/internal/resolved_binding.h>
10 #include <sauce/internal/binding.h>
11 #include <sauce/internal/key.h>
16 template<
typename Dependency,
typename Name>
22 template<
typename Dependency,
typename Name>
41 binding->get(injected, binding, injector);
49 template<
typename Dependency,
typename Name>
50 class ImplicitProviderBinding:
public Binding<Named<Provider<Dependency>, Name>, NoScope> {
53 typedef typename ResolvedBinding<Normalized>::BindingPtr ProvidedBindingPtr;
55 typedef typename Key<ProviderDependency>::Ptr ProviderPtr;
57 ProvidedBindingPtr providedBinding;
59 void validateAcyclic(InjectorPtr, TypeIds &)
const {}
63 typedef typename ResolvedBinding<ProviderDependency>::BindingPtr BindingPtr;
65 ImplicitProviderBinding(ProvidedBindingPtr providedBinding):
66 Binding<Named<Provider<Dependency>, Name>, NoScope>(),
67 providedBinding(providedBinding) {}
69 void inject(ProviderPtr & injected, BindingPtr, InjectorPtr injector)
const {
70 injected.reset(
new ImplicitProvider<Dependency, Name>(providedBinding, injector));
76 namespace i = ::sauce::internal;
80 #endif // SAUCE_INTERNAL_IMPLICIT_PROVIDER_BINDING_H_
A Provider for an explicitly-bound Dependency.
Definition: implicit_provider_binding.h:23
A binding for an acknowledged interface.
Definition: resolved_binding.h:20
Wrap dependency requests with Named to choose one of several (statically) named alternatives.
Definition: named.h:12
An injection that provides Providers for an already-bound dependency.
Definition: implicit_provider_binding.h:17
Named< Dependency, Unnamed > Normalized
Note Normalized is not Iface, but Named.
Definition: key.h:27
A complete specification of a dependency request.
Definition: key.h:15
An interface for including custom factories in an Injector.
Definition: provider.h:15