以此示例代码为例,我希望 button1和button2是两个单独的对象。[Boost] :: DI从注入器创建唯一的shared_ptr对象
#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;
}
电流输出是:
button1-> ID =
button2-> ID =
相反的意图:
button1-> ID =
button2-> ID =
卸下从CommandQueue
单的di::singleton
寿命范围也不能解决问题。 我知道shared_ptr的生命周期默认情况下是单例,但我认为它被引用到注入的依赖关系中,而不是用create创建的实际对象。
什么是addCommand' – sehe
的'相关性这只是一个占位符,以证明使用CommandQueue作为单身,但即使没有这些代码仍然创造1对象而不是2 – Dado