62{
63 std::cout << "=== Service Container Example ===\n\n";
64
66 container.clear();
67
68
69 std::cout << "1. Registering services...\n";
70 container.register_factory<
IGreeter>(
72 service_lifetime::singleton);
73
74
75 container.register_factory<
ICounter>(
77 service_lifetime::transient);
78
79
80 std::cout << "2. Resolving services...\n";
81 auto greeter = container.resolve<
IGreeter>();
82 if (greeter.is_ok())
83 {
84 std::cout << " " << greeter.value()->greet("Developer") << "\n";
85 }
86
87
88 auto greeter2 = container.resolve<
IGreeter>();
89 std::cout << "3. Singleton check: same instance = "
90 << (greeter.value().get() == greeter2.value().get() ? "true" : "false")
91 << "\n";
92
93
94 auto counter1 = container.resolve<
ICounter>();
95 auto counter2 = container.resolve<
ICounter>();
96 std::cout <<
"4. Transient check: counter1=" << counter1.value()->
next()
97 <<
", counter2=" << counter2.value()->
next() <<
"\n";
98
99
100 std::cout << "5. Creating scoped container...\n";
101 auto scope = container.create_scope();
102 if (scope)
103 {
104 std::cout << " Scope created successfully\n";
105 }
106
107
108 std::cout << "6. Freezing container for production...\n";
109 container.freeze();
110 std::cout << " Frozen = " << (container.is_frozen() ? "true" : "false") << "\n";
111
112
113 auto services = container.registered_services();
114 std::cout << "7. Registered services: " << services.size() << "\n";
115
116 container.clear();
117 std::cout << "\nDone.\n";
118 return 0;
119}
Abstract interface for dependency injection containers.
static service_container & global()
Get the global service container instance.