Skip to content

forgotthepen/discopp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dependency Injection Simple Container for C++

Features

  • Compatible with C++11
  • Simple and easy to use API

Example

// 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;
}

About

[C++11] Dependency Injection Simple Container

Topics

Resources

License

Stars

Watchers

Forks

Contributors