{"id":3523018,"name":"github.com/logrange/linker","ecosystem":"go","description":"Package linker provides Dependency Injection and Inversion of Control functionality.\nThe core component is Injector, which allows to register Components. Component\nis an object, which can have any type, which requires some initialization, or can be used\nfor initializing other components. Every component is registered in the Injector\nby the component name or anonymously (empty name). Same object can be registered\nby different names. This could be useful if the object implements different\ninterfaces that can be used by different components.\n\nThe package contains several interfaces: PostConstructor, Initializer and\nShutdowner, which could be implemented by components with a purpose to be called\nby Injector on different initialization/de-initialization phases.\n\nInit() function of Injector allows to initialize registered components. The\ninitialization process supposes that components with 'pointer to struct' type\nor interfaces, which contains a 'pointer to struct' will be initialized. The\ninitialization supposes to inject (assign) the struct fields values using other\nregistered components. Injector matches them by name or by type. Injector uses\nfail-fast strategy so any error is considered like misconfiguraion and a panic\nhappens.\n\nWhen all components are initialized, the components, which implement PostConstructor\ninterface will be notified via PostConsturct() function call. The order of\nPostConstruct() calls is not defined.\n\nAfter the construction phase, injector builds dependencies graph with a purpose\nto detect dependency loops and to establish components initialization order.\nIf a dependency loop is found, Injector will panic. Components, which implement\nInitializer interface, will be notified in specific order by Init(ctx) function\ncall. Less dependant components will be initialized before the components that\nhave dependency on the first ones.\n\nInjector is supposed to be called from one go-routine and doesn't support calls\nfrom multiple go-routines.\n\nInitialization process could take significant time, so context is provided. If\nthe context is cancelled or closed it will be detected either by appropriate\ncomponent or by the Injector what will cause of de-intializing already initialized\ncomponents using Shutdown() function call (if provided) in reverse of the\ninitialization order. Panic will happen then.","homepage":"https://github.com/logrange/linker","licenses":"Apache-2.0","normalized_licenses":["Apache-2.0"],"repository_url":"https://github.com/logrange/linker","keywords_array":[],"namespace":"github.com/logrange","versions_count":1,"first_release_published_at":"2020-06-25T19:18:00.000Z","latest_release_published_at":"2020-06-25T19:18:00.000Z","latest_release_number":"v0.0.0-20200625191800-a2d82c14f745","last_synced_at":"2026-09-25T17:26:11.575Z","created_at":"2022-04-10T22:22:29.510Z","updated_at":"2026-09-25T17:26:11.575Z","registry_url":"https://pkg.go.dev/github.com/logrange/linker","install_command":"go get github.com/logrange/linker","documentation_url":"https://pkg.go.dev/github.com/logrange/linker#section-documentation","metadata":{},"repo_metadata":{"id":57490761,"uuid":"160434102","full_name":"logrange/linker","owner":"logrange","description":"Dependency Injection and Inversion of Control package","archived":false,"fork":false,"pushed_at":"2025-01-09T05:20:37.000Z","size":41,"stargazers_count":35,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-08-22T02:49:14.095Z","etag":null,"topics":["dependency-injection","injector","ioc-framework","lifecycle"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logrange.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2018-12-04T23:56:34.000Z","updated_at":"2025-07-27T01:04:21.000Z","dependencies_parsed_at":"2024-06-18T21:27:33.180Z","dependency_job_id":null,"html_url":"https://github.com/logrange/linker","commit_stats":{"total_commits":30,"total_committers":4,"mean_commits":7.5,"dds":"0.23333333333333328","last_synced_commit":"a2d82c14f745dd818986d84ffd764934f980ba06"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/logrange/linker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logrange","download_url":"https://codeload.github.com/logrange/linker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker/sbom","scorecard":{"id":597437,"data":{"date":"2025-08-11","repo":{"name":"github.com/logrange/linker","commit":"5a47cc9a5661d853da623031613fcd4ed6626083"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T23:30:00.462Z","repository_id":57490761,"created_at":"2025-08-20T23:30:00.462Z","updated_at":"2025-08-20T23:30:00.462Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":37007660,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-08-31T02:00:07.497Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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"},"owner_record":{"login":"logrange","name":"Logrange","uuid":"42285258","kind":"organization","description":"High performance data aggregation system","email":null,"website":"www.logrange.io","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/42285258?v=4","repositories_count":4,"last_synced_at":"2023-03-29T00:35:58.952Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/logrange","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-03-29T00:35:59.016Z","updated_at":"2023-03-29T00:35:59.016Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logrange","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logrange/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-08-31T19:34:40.958Z","dependent_packages_count":2,"downloads":null,"downloads_period":null,"dependent_repos_count":3,"rankings":{"downloads":null,"dependent_repos_count":2.960580782707337,"dependent_packages_count":3.675143442180383,"stargazers_count":6.485750457398439,"forks_count":7.693581380233107,"docker_downloads_count":null,"average":5.203764015629816},"purl":"pkg:golang/github.com/logrange/linker","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/logrange/linker","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/logrange/linker","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/logrange/linker/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2024-01-28T05:01:44.434Z","issues_count":0,"pull_requests_count":0,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":null,"issues_closed_count":0,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/logrange%2Flinker/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Flogrange%2Flinker/codemeta","maintainers":[]}