1 #ifndef SAUCE_PROVIDER_H_
2 #define SAUCE_PROVIDER_H_
6 #include <sauce/memory.h>
7 #include <sauce/internal/disposal_deleter.h>
8 #include <sauce/internal/key.h>
14 template<
typename Dependency>
20 template<
typename Dependency>
41 template<
typename Dependency>
50 sauce::weak_ptr<Abstract> weak;
55 virtual Iface * provide() = 0;
60 virtual void dispose(Iface *) = 0;
68 void setSelf(sauce::weak_ptr<Abstract> weak) {
69 assert(weak.lock().get() ==
this);
79 sauce::shared_ptr<Iface>
get() {
80 sauce::shared_ptr<Abstract>
self = weak.lock();
81 assert(
self.
get() ==
this);
82 Deleter deleter(sauce::static_pointer_cast<Abstract>(
self));
83 return sauce::shared_ptr<Iface>(provide(), deleter);
90 #endif // SAUCE_PROVIDER_H_
A smart pointer deleter that diposes with the given disposal.
Definition: disposal_deleter.h:13
i::Key< Dependency >::Iface Provides
Indicates to template magic that this type exposes sauce::shared_ptr
get(). Definition: provider.h:27
An interface for including custom factories in an Injector.
Definition: provider.h:42
A complete specification of a dependency request.
Definition: key.h:15
An interface for including custom factories in an Injector.
Definition: provider.h:15