{"id":18545321,"url":"https://github.com/xeinebiu/ts_injector","last_synced_at":"2025-04-09T19:31:58.414Z","repository":{"id":46203219,"uuid":"425097718","full_name":"xeinebiu/ts_injector","owner":"xeinebiu","description":"Simple and lightweight injector for typescript projects.","archived":false,"fork":false,"pushed_at":"2021-11-08T14:27:37.000Z","size":65,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T10:56:30.949Z","etag":null,"topics":["angular","browser","dependency","dependency-graph","dependency-injection","dependency-manager","html","injection","javascript","node","nodejs","react","reactjs","simple","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xeinebiu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-05T22:16:12.000Z","updated_at":"2024-10-04T11:54:23.000Z","dependencies_parsed_at":"2022-09-08T11:30:23.111Z","dependency_job_id":null,"html_url":"https://github.com/xeinebiu/ts_injector","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xeinebiu%2Fts_injector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xeinebiu%2Fts_injector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xeinebiu%2Fts_injector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xeinebiu%2Fts_injector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xeinebiu","download_url":"https://codeload.github.com/xeinebiu/ts_injector/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248097884,"owners_count":21047333,"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":["angular","browser","dependency","dependency-graph","dependency-injection","dependency-manager","html","injection","javascript","node","nodejs","react","reactjs","simple","typescript"],"created_at":"2024-11-06T20:19:43.607Z","updated_at":"2025-04-09T19:31:58.066Z","avatar_url":"https://github.com/xeinebiu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Typescript Injector\n![](https://img.shields.io/badge/minzipped%20size-7%20kb-green)\n![](https://img.shields.io/badge/build-passing-green)\n![](https://img.shields.io/badge/Typescript-100%25-green)\n![](https://img.shields.io/badge/License-MIT-green)\n\nSimple and lightweight injector for typescript projects.\n\n---\n\n## Installation\n``\nnpm install @xeinebiu/ts_injector@1.0.2\n``\n\n## Modules\nModule allows you to ``provide`` classes when they are requested via `injection`\n\n````typescript\ncreateDiModule({\n    provides: [{\n        provide: FeedRepository\n    }]\n})\n````\nOn the example above, we are providing `FeedRepository` on any `scope` required.\n\nNow, to use it, simply annotate the property with ```@Inject()```\n\n````typescript\nclass Demo {\n    \n    @Inject()\n    private readonly feedRepository!: FeedRepository\n}\n````\n\n---\n\n## Providers\n\n### Singleton\n\nTo make the ``FeedRepository`` a singleton, simply add `singleton: true`\n\n``FeedReposiotory`` class must not be `abstract`\n\n````typescript\ncreateDiModule({\n    provides: [{\n        provide: FeedRepository,\n        singleton: true\n    }]\n})\n````\n### Use Class\nWhether your project is built in on abstraction, the following example can be used.\n```typescript\ncreateDiModule({\n    provides: [{\n        singleton: true,\n        provide: FeedRepository,    // can also be abstract when used with `useClass`\n        useClass: DemoFeedRepository\n    }]\n})\n```\n```DemoFeedRepository``` will be provided for `FeedRepository`. Since we are setting `singleton: true`, a single instance is shared.\n\n### Use Value\nProvide a class instance for requested provider.\n```typescript\ncreateDiModule({\n    provides: [{\n        provide: FeedRepository,    // can also be abstract when used with `useValue`\n        useValue: new DemoFeedRepository(...arguments)\n    }]\n})\n```\nWhen ``useValue`` is used, singleton is set by default to `true`\n\n---\n\n## Scope\nUsing ```scope``` allows providing different classes on specific scope.\n````typescript\ncreateDiModule({\n    provides: [{\n        provide: FeedRepository,\n        useClass: RootFeedRepository,\n        provideIn: 'root'\n    }]\n})\n````\nIt is a must to annotate the class where the scope is needed.\n````typescript\n@Scope({\n    scope: 'root'\n})\nclass RootDemo {\n\n    @Inject()\n    private readonly feedRepository!: FeedRepository\n}\n````\n``feedRepository`` on `RootDemo` is provided with `RootFeedRepository`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxeinebiu%2Fts_injector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxeinebiu%2Fts_injector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxeinebiu%2Fts_injector/lists"}