以此示例代碼爲例,我希望 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