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++.
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();
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);
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;