{"id":18283973,"url":"https://github.com/demurzasty/injector","last_synced_at":"2025-06-26T16:09:20.182Z","repository":{"id":93696030,"uuid":"308111219","full_name":"demurzasty/injector","owner":"demurzasty","description":"Header-only, tiny and easy to use library for dependency injection written in C++17.","archived":false,"fork":false,"pushed_at":"2021-04-02T10:34:42.000Z","size":23,"stargazers_count":13,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-05T07:33:20.506Z","etag":null,"topics":["architectural-patterns","cpp","cpp17","dependency-injection","header-only","modern-cpp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/demurzasty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-28T18:47:57.000Z","updated_at":"2024-01-11T20:43:41.000Z","dependencies_parsed_at":"2023-05-01T17:30:40.436Z","dependency_job_id":null,"html_url":"https://github.com/demurzasty/injector","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/demurzasty/injector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demurzasty%2Finjector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demurzasty%2Finjector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demurzasty%2Finjector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demurzasty%2Finjector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/demurzasty","download_url":"https://codeload.github.com/demurzasty/injector/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/demurzasty%2Finjector/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262099718,"owners_count":23258668,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architectural-patterns","cpp","cpp17","dependency-injection","header-only","modern-cpp"],"created_at":"2024-11-05T13:11:41.733Z","updated_at":"2025-06-26T16:09:20.169Z","avatar_url":"https://github.com/demurzasty.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# injector\n\n[![Build Status](https://github.com/demurzasty/injector/workflows/CMake/badge.svg)](https://github.com/skypjack/entt/actions)  \n*injector* is a header-only, tiny and easy to use library for dependency injection written in *C++17*.\n\n## Code Examples\n\n### Basic Usage\n```cpp\n#include \u003cinjector/injector.hpp\u003e\n\n#include \u003cstring\u003e\n#include \u003ciostream\u003e\n#include \u003cfstream\u003e\n\nstruct logger {\n    virtual ~logger() = default;\n    virtual void log(const std::string\u0026 message) = 0;\n};\n\nstruct stdout_logger : public logger {\n    void log(const std::string\u0026 message) override {\n        std::cout \u003c\u003c message \u003c\u003c std::endl;\n    }\n};\n\nstruct file_logger : public logger {\n    void log(const std::string\u0026 message) override {\n        std::ofstream(\"log.txt\", std::ios::app) \u003c\u003c message \u003c\u003c std::endl;\n    }\n};\n\nint main(int argc, char* argv[]) {\n    di::dependency_container container;\n\n    container.install\u003clogger, stdout_logger\u003e(di::dependency_lifetime::singleton);\n\n    auto logger = container.get\u003c::logger\u003e();\n\n    logger-\u003elog(\"Hello World!\");\n}\n```\n\n### Dependency Injection\n```cpp\n#include \u003cinjector/injector.hpp\u003e\n\n#include \u003cstring\u003e\n#include \u003ciostream\u003e\n#include \u003cfstream\u003e\n\nstruct logger {\n    void log(const std::string\u0026 message) {\n        std::cout \u003c\u003c message \u003c\u003c std::endl;\n    }\n};\n\nstruct important_service  {\n    important_service(std::shared_ptr\u003clogger\u003e logger)\n        : _logger(logger) {\n    }\n\n    void do_something_important() {\n        _logger-\u003elog(\"do_something_important()\");\n    }\n\n    std::shared_ptr\u003clogger\u003e _logger;\n};\n\n\nint main(int argc, char* argv[]) {\n    di::dependency_container container;\n\n    container.install\u003clogger\u003e(di::dependency_lifetime::singleton);\n    container.install\u003cimportant_service\u003e(di::dependency_lifetime::singleton);\n\n    auto service = container.get\u003cimportant_service\u003e();\n\n    service-\u003edo_something_important();\n}\n```\n### Resolver\n```cpp\n#include \u003cinjector/injector.hpp\u003e\n\n#include \u003cstring\u003e\n#include \u003ciostream\u003e\n#include \u003cfstream\u003e\n\nstruct logger {\n    static std::shared_ptr\u003clogger\u003e resolver(di::dependency_container\u0026 container);\n    virtual ~logger() = default;\n    virtual void log(const std::string\u0026 message) = 0;\n};\n\nstruct stdout_logger : public logger {\n    void log(const std::string\u0026 message) override {\n        std::cout \u003c\u003c message \u003c\u003c std::endl;\n    }\n};\n\nstd::shared_ptr\u003clogger\u003e logger::resolver(di::dependency_container\u0026 container) {\n    return container.resolve\u003cstdout_logger\u003e();\n}\n\nint main(int argc, char* argv[]) {\n    di::dependency_container container;\n\n    container.install\u003clogger\u003e(di::dependency_lifetime::singleton, \u0026logger::resolver);\n\n    auto logger = container.get\u003c::logger\u003e();\n\n    logger-\u003elog(\"Hello World!\");\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemurzasty%2Finjector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdemurzasty%2Finjector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemurzasty%2Finjector/lists"}