Menu

Home

Adam

Welcome to Dependency Injection in C++ project.

This project aims at creating easy to use, type based dependency injection and module management framework for C++.

Object Injection

Dependency injection outside constructor with lifetime and requirements control.

struct Buildable : di::subject<Dep1,Dep2,Dep3> {
  di::required<di::unique<Dep1>> attr1;
  di::required<di::shared<Dep2>> attr2;
  di::optional<di::unique<Dep3>> attr3;
};

di::builder<Buildable> builder;
builder.use(di::unique<Dep1>(new Dep1));
builder.use(di::shared<Dep2>(new Dep2));

Buildable* object = builder.build();

Dependency Grouping

Grouping common dependencies for families of types with on demand requirements control.

di::generic_builder<di::subject<Dep1,Dep2>> builder1;
builder.use(di::unique<Dep1>(new Dep1));
builder.use(di::shared<Dep2>(new Dep2));

di::generic_builder<di::subject<Dep3>> builder2;
builder.use(di::unique<Dep3>(new Dep3));

Buildable object;
builder1.build_part(object);
builder2.build_part(object);

Module Management

Flexible and easy to use service grouping into modules with access control.

struct Module1 {
  di::service_list<Service1, Service2> provided;
  di::service_list<const Service3, Service4> needed;
};

struct Module2 {
  di::service_list<const Service3, Service4> provided;
  di::service_list<const Service2> needed;
};

di::application<Module1, Module2> application;


MongoDB Logo MongoDB