En prenant cet exemple de code, je voudrais avoir comme résultat que button1 et button2 sont deux objets distincts.[Boost] :: DI créant des objets shared_ptr uniques à partir de l'injecteur
#include <iostream>
#include <memory>
#include "di.hpp"
namespace di = boost::di;
struct CommandQueue {
void addCommand() {}
};
struct Control {
Control(CommandQueue &cq) : cq(cq) {
static int sid{};
id = ++sid;
}
CommandQueue& cq;
int id{};
};
int main() {
auto injector = di::make_injector(di::bind<CommandQueue>().in(di::singleton));
auto button1 = injector.create<std::shared_ptr<Control>>();
auto button2 = injector.create<std::shared_ptr<Control>>();
std::cout << "button1->id = " << button1->id << std::endl;
std::cout << "button2->id = " << button2->id << std::endl;
return 0;
}
Le courant de sortie est la suivante:
button1-> id =
button2-> id =
Au lieu de la destinée:
button1-> id =
button2-> id =
Retrait du périmètre de vie di::singleton
de CommandQueue
singleton ne fixe pas aussi. Je sais que la portée à vie d'un shared_ptr est un singleton par défaut mais je pensais que c'était la dépendance injectée et non l'objet créé avec create.
Quelle est la pertinence de 'addCommand' – sehe
Il est juste un espace réservé pour justifier l'utilisation de CommandQueue comme singleton mais même sans que le code serait toujours créer 1 objet au lieu de 2 – Dado