{"id":26954630,"url":"https://github.com/evandersondev/injectfy","last_synced_at":"2025-07-18T01:10:49.248Z","repository":{"id":268427185,"uuid":"904318750","full_name":"evandersondev/injectfy","owner":"evandersondev","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-27T16:35:24.000Z","size":61,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-27T17:30:32.295Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","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/evandersondev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2024-12-16T16:54:40.000Z","updated_at":"2024-12-27T16:35:28.000Z","dependencies_parsed_at":"2024-12-16T18:23:53.300Z","dependency_job_id":"cd9fe394-9c36-48d4-b3c2-b531ae23493d","html_url":"https://github.com/evandersondev/injectfy","commit_stats":null,"previous_names":["evandersondev/injectonize"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evandersondev%2Finjectfy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evandersondev%2Finjectfy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evandersondev%2Finjectfy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evandersondev%2Finjectfy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evandersondev","download_url":"https://codeload.github.com/evandersondev/injectfy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246922227,"owners_count":20855345,"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":[],"created_at":"2025-04-03T02:18:36.380Z","updated_at":"2025-04-03T02:18:36.946Z","avatar_url":"https://github.com/evandersondev.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"width: 100%;display:flex;flex-direction:column;justify-content:center;align-items:center;\"\u003e\n  \u003cimg src=\"assets/logo.jpg\" style=\"width:120px;height:120px;border-radius:16px;\" /\u003e\n  \u003ch1 style=\"border:none;\"\u003eInjectfy\u003c/h1\u003e\n\u003c/div\u003e\n\n\u003ch2 style=\"border:none;text-align:center;\"\u003e🚀 A minimalistic and easy-to-use dependency injection library for managing singletons and factories in Dart.\u003c/h2\u003e\n\n## 🌟 Features\n\n- ✅ Register singletons and factories to manage dependencies.\n- 🔄 Automatically resolve and inject dependencies.\n- ❌ Easily unregister dependencies.\n- ⚡ Cache frequently accessed instances for better performance.\n- 🛠️ Useful for both production and testing (with mock support).\n\n## 📦 Installation\n\nAdd the following dependency to your `pubspec.yaml`:\n\n```yaml\ndependencies:\n  injectfy: ^1.0.1\n```\n\nThen, run:\n\n```bash\nflutter pub get\n```\n\n## 🚀 Getting Started\n\n### 📋 Basic Usage\n\n```dart\nimport 'package:injectfy/injectfy.dart';\n\nvoid main() {\n  // Get instance\n  final injectfy = Injectfy.instance;\n\n  // Registering a singleton\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  // Registering a factory\n  injectfy.registerFactory\u003cClientsRepository\u003e(() =\u003e ClientsRepositoryImpl());\n\n  // Resolving dependencies\n  final someService = injectfy.get\u003cSomeService\u003e();\n  final clientsRepository = injectfy.get\u003cClientsRepository\u003e();\n\n  print(someService);  // Instance of SomeService\n  print(clientsRepository);  // Instance of ClientsRepositoryImpl\n}\n```\n\n### 🧱 Registering a Singleton\n\nA singleton will be instantiated only once and reused every time it's requested.\n\n```dart\nclass SomeService {\n  void doSomething() =\u003e print(\"Doing something...\");\n}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  final service1 = Injectfy.get\u003cSomeService\u003e();\n  final service2 = Injectfy.get\u003cSomeService\u003e();\n\n  print(identical(service1, service2));  // Output: true\n}\n```\n\n### 🏢 Registering a Factory\n\nA factory allows creating a new instance of the dependency every time it is requested.\n\n```dart\nclass UserRepository {}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerFactory\u003cUserRepository\u003e(() =\u003e UserRepository());\n\n  final repo1 = Injectfy.get\u003cUserRepository\u003e();\n  final repo2 = Injectfy.get\u003cUserRepository\u003e();\n\n  print(identical(repo1, repo2));  // Output: false\n}\n```\n\n### 🧐 Automatically Resolving Dependencies\n\nYou can automatically resolve dependencies when calling a method.\n\n```dart\nclass SomeService {\n  final SomeDependency _someDependency;\n\n  SomeService(this._someDependency);\n}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService(injectfy()));\n}\n```\n\n### 🛠️ Unregistering a Dependency\n\nYou can unregister a previously registered dependency if it's no longer needed.\n\n```dart\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  injectfy.unregister\u003cSomeService\u003e();\n\n  try {\n    final service = Injectfy.get\u003cSomeService\u003e();\n  } catch (e) {\n    print(e);  // Dependency of type SomeService not found.\n  }\n}\n```\n\n### 🧪 Registering Mock Dependencies (Useful for Testing)\n\nFor testing purposes, you can register mock objects in place of actual dependencies.\n\n```dart\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  final mockService = SomeService();\n  injectfy.registerMock\u003cSomeService\u003e(mockService);\n\n  final service = Injectfy.get\u003cSomeService\u003e();\n  print(service == mockService);  // Output: true\n}\n```\n\n## 🖋️ API Reference\n\n### 🛠️ `Injectfy`\n\n| Method                 | Description                                                                |\n| ---------------------- | -------------------------------------------------------------------------- |\n| `instance`             | Get a singleton instance of Injectfy.                                      |\n| `I`                    | Short syntax to get the instance.                                          |\n| `registerSingleton\u003cT\u003e` | Registers a singleton for the specified type `T`.                          |\n| `registerFactory\u003cT\u003e`   | Registers a factory for the specified type `T`.                            |\n| `get\u003cT\u003e`               | Resolves and returns the instance of type `T`.                             |\n| `call\u003cT\u003e`              | Automatically resolves and returns the instance of type `T`.               |\n| `unregister\u003cT\u003e`        | Unregisters the dependency of type `T`.                                    |\n| `registerMock\u003cT\u003e`      | Registers a mock object in place of a real dependency. Useful for testing. |\n\n## 🧪 Testing\n\nYou can test your application by registering mock dependencies for testing purposes.\n\n### Example of Testing with Mocks\n\n```dart\nimport 'package:test/test.dart';\n\nvoid main() {\n  test('Singleton works correctly', () {\n    Injectfy.I.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n    final service1 = Injectfy.get\u003cSomeService\u003e();\n    final service2 = Injectfy.get\u003cSomeService\u003e();\n\n    expect(identical(service1, service2), true);\n  });\n\n  test('Factory works correctly', () {\n    Injectfy.I.registerFactory\u003cUserRepository\u003e(() =\u003e UserRepository());\n\n    final repo1 = Injectfy.get\u003cUserRepository\u003e();\n    final repo2 = Injectfy.get\u003cUserRepository\u003e();\n\n    expect(identical(repo1, repo2), false);\n  });\n\n  test('Mock registration works correctly', () {\n    final mockService = SomeService();\n    Injectfy.I.registerMock\u003cSomeService\u003e(mockService);\n\n    final service = Injectfy.get\u003cSomeService\u003e();\n\n    expect(service, mockService);\n  });\n}\n```\n\n## 🧱 Contributing\n\nContributions are welcome! Please open issues or submit pull requests on the GitHub repository.\n\n## 📄 License\n\nThis library is licensed under the MIT License. See the LICENSE file for details.\n\n# 🚀 Injectfy: A Simple Dependency Injection Library for Dart\n\nA minimalistic and easy-to-use dependency injection library for managing singletons and factories in Dart.\n\n## 🌟 Features\n\n- ✅ Register singletons and factories to manage dependencies.\n- 🔄 Automatically resolve and inject dependencies.\n- ❌ Easily unregister dependencies.\n- ⚡ Cache frequently accessed instances for better performance.\n- 🛠️ Useful for both production and testing (with mock support).\n\n## 📦 Installation\n\nAdd the following dependency to your `pubspec.yaml`:\n\n```yaml\ndependencies:\n  injectfy: ^1.0.0\n```\n\nThen, run:\n\n```bash\nflutter pub get\n```\n\n## 🚀 Getting Started\n\n### 📋 Basic Usage\n\n```dart\nimport 'package:injectfy/injectfy.dart';\n\nvoid main() {\n  // Get instance\n  final injectfy = Injectfy.instance;\n\n  // Registering a singleton\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  // Registering a factory\n  injectfy.registerFactory\u003cClientsRepository\u003e(() =\u003e ClientsRepositoryImpl());\n\n  // Resolving dependencies\n  final someService = injectfy.get\u003cSomeService\u003e();\n  final clientsRepository = injectfy.get\u003cClientsRepository\u003e();\n\n  print(someService);  // Instance of SomeService\n  print(clientsRepository);  // Instance of ClientsRepositoryImpl\n}\n```\n\n### 🧱 Registering a Singleton\n\nA singleton will be instantiated only once and reused every time it's requested.\n\n```dart\nclass SomeService {\n  void doSomething() =\u003e print(\"Doing something...\");\n}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  final service1 = Injectfy.get\u003cSomeService\u003e();\n  final service2 = Injectfy.get\u003cSomeService\u003e();\n\n  print(identical(service1, service2));  // Output: true\n}\n```\n\n### 🏢 Registering a Factory\n\nA factory allows creating a new instance of the dependency every time it is requested.\n\n```dart\nclass UserRepository {}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerFactory\u003cUserRepository\u003e(() =\u003e UserRepository());\n\n  final repo1 = Injectfy.get\u003cUserRepository\u003e();\n  final repo2 = Injectfy.get\u003cUserRepository\u003e();\n\n  print(identical(repo1, repo2));  // Output: false\n}\n```\n\n### 🧐 Automatically Resolving Dependencies\n\nYou can automatically resolve dependencies when calling a method.\n\n```dart\nclass SomeService {\n  final SomeDependency _someDependency;\n\n  SomeService(this._someDependency);\n}\n\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService(injectfy()));\n}\n```\n\n### 🛠️ Unregistering a Dependency\n\nYou can unregister a previously registered dependency if it's no longer needed.\n\n```dart\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  injectfy.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n  injectfy.unregister\u003cSomeService\u003e();\n\n  try {\n    final service = Injectfy.get\u003cSomeService\u003e();\n  } catch (e) {\n    print(e);  // Dependency of type SomeService not found.\n  }\n}\n```\n\n### 🧪 Registering Mock Dependencies (Useful for Testing)\n\nFor testing purposes, you can register mock objects in place of actual dependencies.\n\n```dart\nvoid main() {\n  final injectfy = Injectfy.instance;\n\n  final mockService = SomeService();\n  injectfy.registerMock\u003cSomeService\u003e(mockService);\n\n  final service = Injectfy.get\u003cSomeService\u003e();\n  print(service == mockService);  // Output: true\n}\n```\n\n## 🖋️ API Reference\n\n### 🛠️ `Injectfy`\n\n| Method                 | Description                                                                |\n| ---------------------- | -------------------------------------------------------------------------- |\n| `instance`             | Get a singleton instance of Injectfy.                                      |\n| `I`                    | Short syntax to get the instance.                                          |\n| `registerSingleton\u003cT\u003e` | Registers a singleton for the specified type `T`.                          |\n| `registerFactory\u003cT\u003e`   | Registers a factory for the specified type `T`.                            |\n| `get\u003cT\u003e`               | Resolves and returns the instance of type `T`.                             |\n| `call\u003cT\u003e`              | Automatically resolves and returns the instance of type `T`.               |\n| `unregister\u003cT\u003e`        | Unregisters the dependency of type `T`.                                    |\n| `registerMock\u003cT\u003e`      | Registers a mock object in place of a real dependency. Useful for testing. |\n\n## 🧪 Testing\n\nYou can test your application by registering mock dependencies for testing purposes.\n\n### Example of Testing with Mocks\n\n```dart\nimport 'package:test/test.dart';\n\nvoid main() {\n  test('Singleton works correctly', () {\n    Injectfy.I.registerSingleton\u003cSomeService\u003e(() =\u003e SomeService());\n\n    final service1 = Injectfy.get\u003cSomeService\u003e();\n    final service2 = Injectfy.get\u003cSomeService\u003e();\n\n    expect(identical(service1, service2), true);\n  });\n\n  test('Factory works correctly', () {\n    Injectfy.I.registerFactory\u003cUserRepository\u003e(() =\u003e UserRepository());\n\n    final repo1 = Injectfy.get\u003cUserRepository\u003e();\n    final repo2 = Injectfy.get\u003cUserRepository\u003e();\n\n    expect(identical(repo1, repo2), false);\n  });\n\n  test('Mock registration works correctly', () {\n    final mockService = SomeService();\n    Injectfy.I.registerMock\u003cSomeService\u003e(mockService);\n\n    final service = Injectfy.get\u003cSomeService\u003e();\n\n    expect(service, mockService);\n  });\n}\n```\n\n## 🧱 Contributing\n\nContributions are welcome! Please open issues or submit pull requests on the GitHub repository.\n\n## 📄 License\n\nThis library is licensed under the MIT License. See the LICENSE file for details.\n\n---\n\nMade with ❤️ for Flutter developers! 🎯\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevandersondev%2Finjectfy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevandersondev%2Finjectfy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevandersondev%2Finjectfy/lists"}