-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathboost.di.cpp
More file actions
77 lines (63 loc) · 1.42 KB
/
boost.di.cpp
File metadata and controls
77 lines (63 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "di.hpp"
#include <cstdio>
#include <iostream>
#include <memory>
using std::make_unique;
using std::make_shared;
struct Engine
{
float volume = 5;
int horse_power = 400;
friend std::ostream& operator<<(std::ostream& os, const Engine& obj)
{
return os
<< "volume: " << obj.volume
<< " horse_power: " << obj.horse_power;
}
};
struct ILogger
{
virtual ~ILogger()
{
}
virtual void Log(const std::string& s) = 0;
};
struct ConsoleLogger : ILogger
{
ConsoleLogger()
{
}
void Log(const std::string& s) override
{
std::cout << "LOG:" << s.c_str() << std::endl;
}
};
struct Car
{
std::unique_ptr<Engine> engine;
std::shared_ptr<ILogger> logger;
Car(std::unique_ptr<Engine> engine, const std::shared_ptr<ILogger>& logger)
: engine{move(engine)},
logger{logger}
{
logger->Log("making a car");
}
friend std::ostream& operator<<(std::ostream& os, const Car& obj)
{
return os << "car with engine: " << *obj.engine;
}
};
int main123()
{
// manual
auto logger = make_shared<ConsoleLogger>();
auto c = make_shared<Car>(make_unique<Engine>(),logger);
using namespace boost;
auto injector = di::make_injector(
di::bind<ILogger>().to<ConsoleLogger>()
);
auto car = injector.create<std::shared_ptr<Car>>();
std::cout << *car << std::endl;
getchar();
return 0;
}