Dependency Injection Simple Container for C++
Compatible with C++11
Simple and easy to use API
// interface.hpp
#include < string>
struct IFormatter {
virtual ~IFormatter () = default ;
virtual std::string format (const std::string &str) = 0;
};
struct ILogger {
virtual ~ILogger () = default ;
virtual void log (const std::string &str) = 0;
};
// implementation.hpp
#include < iostream>
#include < string>
struct DummyFormatter : IFormatter {
std::string format (const std::string &str) override {
return " [log] " + str;
}
};
struct ConsoleLogger : ILogger {
std::shared_ptr<IFormatter> formatter_;
ConsoleLogger (std::shared_ptr<IFormatter> formatter)
:formatter_(formatter) { }
void log (const std::string &str) override {
std::cout << formatter_->format (str) << ' \n ' ;
}
};
// setup.hpp / setup.cpp
#include " interface.hpp"
#include " implementation.hpp"
#include " discopp/discopp.hpp"
discopp::discopp dicon{};
void setup () {
dicon.register_type <ILogger, ConsoleLogger, IFormatter>();
dicon.register_type <IFormatter, DummyFormatter>();
}
// main.cpp
#include " interface.hpp"
#include " setup.hpp"
#include " discopp/discopp.hpp"
discopp::discopp dicon{};
int main () {
setup ();
auto logger = dicon.resolve <ILogger>();
logger->log (" it works" );
return 0 ;
}