https://github.com/demurzasty/injector
Header-only, tiny and easy to use library for dependency injection written in C++17.
https://github.com/demurzasty/injector
architectural-patterns cpp cpp17 dependency-injection header-only modern-cpp
Last synced: 9 months ago
JSON representation
Header-only, tiny and easy to use library for dependency injection written in C++17.
- Host: GitHub
- URL: https://github.com/demurzasty/injector
- Owner: demurzasty
- Created: 2020-10-28T18:47:57.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-04-02T10:34:42.000Z (almost 5 years ago)
- Last Synced: 2025-04-05T07:33:20.506Z (12 months ago)
- Topics: architectural-patterns, cpp, cpp17, dependency-injection, header-only, modern-cpp
- Language: C++
- Homepage:
- Size: 22.5 KB
- Stars: 13
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# injector
[](https://github.com/skypjack/entt/actions)
*injector* is a header-only, tiny and easy to use library for dependency injection written in *C++17*.
## Code Examples
### Basic Usage
```cpp
#include
#include
#include
#include
struct logger {
virtual ~logger() = default;
virtual void log(const std::string& message) = 0;
};
struct stdout_logger : public logger {
void log(const std::string& message) override {
std::cout << message << std::endl;
}
};
struct file_logger : public logger {
void log(const std::string& message) override {
std::ofstream("log.txt", std::ios::app) << message << std::endl;
}
};
int main(int argc, char* argv[]) {
di::dependency_container container;
container.install(di::dependency_lifetime::singleton);
auto logger = container.get<::logger>();
logger->log("Hello World!");
}
```
### Dependency Injection
```cpp
#include
#include
#include
#include
struct logger {
void log(const std::string& message) {
std::cout << message << std::endl;
}
};
struct important_service {
important_service(std::shared_ptr logger)
: _logger(logger) {
}
void do_something_important() {
_logger->log("do_something_important()");
}
std::shared_ptr _logger;
};
int main(int argc, char* argv[]) {
di::dependency_container container;
container.install(di::dependency_lifetime::singleton);
container.install(di::dependency_lifetime::singleton);
auto service = container.get();
service->do_something_important();
}
```
### Resolver
```cpp
#include
#include
#include
#include
struct logger {
static std::shared_ptr resolver(di::dependency_container& container);
virtual ~logger() = default;
virtual void log(const std::string& message) = 0;
};
struct stdout_logger : public logger {
void log(const std::string& message) override {
std::cout << message << std::endl;
}
};
std::shared_ptr logger::resolver(di::dependency_container& container) {
return container.resolve();
}
int main(int argc, char* argv[]) {
di::dependency_container container;
container.install(di::dependency_lifetime::singleton, &logger::resolver);
auto logger = container.get<::logger>();
logger->log("Hello World!");
}
```