Simple

Examples/Simple
#include <SevenBit/DI.hpp>
#include <iostream>

using namespace sb::di;

struct IAppPartA
{
    virtual void doPart() = 0;

    virtual ~IAppPartA() = default;
};

struct IAppPartB
{
    virtual void doPart() = 0;

    virtual ~IAppPartB() = default;
};

struct AppPartA final : IAppPartA
{
    void doPart() override { std::cout << "part a done!" << std::endl; }
};

struct AppPartB final : IAppPartB
{
    void doPart() override { std::cout << "part b done!" << std::endl; }
};

class Application
{
    IAppPartA &_partA;
    IAppPartB &_partB;

  public:
    Application(IAppPartA &partA, IAppPartB &partB) : _partA(partA), _partB(partB) {}

    [[nodiscard]] int run() const
    {
        _partA.doPart();
        _partB.doPart();
        return 0;
    }
};

int main()
{
    ServiceProvider provider = ServiceCollection{}
                                   .addSingleton<IAppPartA, AppPartA>()
                                   .addSingleton<IAppPartB, AppPartB>()
                                   .addSingleton<Application>()
                                   .buildServiceProvider();

    const auto &app = provider.getService<Application>();
    return app.run();
}