An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# injector

[![Build Status](https://github.com/demurzasty/injector/workflows/CMake/badge.svg)](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!");
}
```