Skip to content

Commit cbb18a7

Browse files
committed
add logger example
1 parent 7a2694c commit cbb18a7

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

Examples/Logger.cpp

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include <SevenBit/DI.hpp>
2+
#include <filesystem>
3+
#include <fstream>
4+
#include <iostream>
5+
6+
using namespace sb::di;
7+
8+
struct ILogger
9+
{
10+
virtual void log(const std::string &message) = 0;
11+
12+
virtual ~ILogger() = default;
13+
};
14+
15+
struct StdLogger final : ILogger
16+
{
17+
void log(const std::string &message) override { std::cout << message << std::endl; }
18+
};
19+
20+
struct FileLogger final : ILogger
21+
{
22+
std::ofstream logFile{"log.txt"};
23+
24+
void log(const std::string &message) override { logFile << message << std::endl; }
25+
};
26+
27+
struct VoidLogger final : ILogger
28+
{
29+
void log(const std::string &message) override {}
30+
};
31+
32+
class Application
33+
{
34+
ILogger &_logger;
35+
36+
public:
37+
explicit Application(ILogger &logger) : _logger(logger) {}
38+
39+
int run()
40+
{
41+
_logger.log("Initializing");
42+
init();
43+
_logger.log("Processing");
44+
process();
45+
_logger.log("Finalizing");
46+
finalize();
47+
return 0;
48+
}
49+
50+
private:
51+
void init() {}
52+
void process() {}
53+
void finalize() {}
54+
};
55+
56+
void addLogger(const std::string_view loggerName, ServiceCollection &services)
57+
{
58+
if (loggerName == "fileLogger")
59+
{
60+
services.addSingleton<ILogger, FileLogger>();
61+
}
62+
else if (loggerName == "voidLogger")
63+
{
64+
services.addSingleton<ILogger, VoidLogger>();
65+
}
66+
else
67+
{
68+
services.addSingleton<ILogger, StdLogger>();
69+
}
70+
}
71+
72+
int main(int argc, char *argv[])
73+
{
74+
ServiceCollection services;
75+
const auto loggerName = argc > 1 ? argv[1] : "stdLogger";
76+
addLogger(loggerName, services);
77+
services.addSingleton<Application>();
78+
79+
ServiceProvider provider = services.buildServiceProvider();
80+
81+
auto &app = provider.getService<Application>();
82+
return app.run();
83+
}

Tests/E2E/Examples/expected_test_data.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"InjectingServices": "^actionA, actionB executed.",
1111
"InjectionRules": "",
1212
"KeyedServices": "^action, action, action executed.",
13+
"Logger": "^Initializing\nProcessing\nFinalizing",
1314
"RegisterUtilityClass": "^actionA, actionB executed.",
1415
"SeparateImplementation": "^Hello from service.",
1516
"ServicesLifeTime": "\nSingletons comparison\nrootProvider\\s+== rootProvider:\\s+1\nrootProvider\\s+== scopedProvider:\\s+1\nscopedProvider\\s+== scopedProvider:\\s+1\n\nScoped comparison\nrootProvider\\s+== rootProvider:\\s+1\nrootProvider\\s+== scopedProvider:\\s+0\nscopedProvider\\s+== scopedProvider:\\s+1\n\nTransient comparison\nrootProvider\\s+== rootProvider:\\s+0\nrootProvider\\s+== scopedProvider:\\s+0\nscopedProvider\\s+== scopedProvider:\\s+0\n",

0 commit comments

Comments
 (0)