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>
14template<
typename Dependency>
20template<
typename Dependency>
41template<
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);
An interface for including custom factories in an Injector.
Definition: provider.h:42
sauce::shared_ptr< Iface > get()
Provide an Iface.
Definition: provider.h:79
An interface for including custom factories in an Injector.
Definition: provider.h:21
i::Key< Dependency >::Iface Provides
Indicates to template magic that this type exposes sauce::shared_ptr<Provides> get().
Definition: provider.h:27
virtual i::Key< Dependency >::Ptr get()=0
Provide an Iface.
A smart pointer deleter that diposes with the given disposal.
Definition: disposal_deleter.h:13
A complete specification of a dependency request.
Definition: key.h:15