{"id":20664005,"url":"https://github.com/flutterando/auto_injector","last_synced_at":"2025-04-06T18:15:26.660Z","repository":{"id":65261913,"uuid":"586062290","full_name":"Flutterando/auto_injector","owner":"Flutterando","description":"Dependency injection system. But without build_runner :)","archived":false,"fork":false,"pushed_at":"2025-03-12T18:42:07.000Z","size":386,"stargazers_count":54,"open_issues_count":3,"forks_count":19,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-30T16:13:06.026Z","etag":null,"topics":["dart","flutter","flutterando"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/auto_injector","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Flutterando.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":"2023-01-06T20:54:06.000Z","updated_at":"2025-03-12T18:42:11.000Z","dependencies_parsed_at":"2023-11-28T20:31:36.297Z","dependency_job_id":"c6ef506a-7087-4ef6-bd34-872cd7f7d5df","html_url":"https://github.com/Flutterando/auto_injector","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flutterando%2Fauto_injector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flutterando%2Fauto_injector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flutterando%2Fauto_injector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flutterando%2Fauto_injector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Flutterando","download_url":"https://codeload.github.com/Flutterando/auto_injector/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247526764,"owners_count":20953143,"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":["dart","flutter","flutterando"],"created_at":"2024-11-16T19:21:35.848Z","updated_at":"2025-04-06T18:15:26.641Z","avatar_url":"https://github.com/Flutterando.png","language":"Dart","readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\n\u003ch1 align=\"center\"\u003eAuto Injector - Automatic Dependency injection system without build_runner.\u003c/h1\u003e\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- You should link the logo to the pub dev page of you project or a homepage otherwise --\u003e\n  \u003ca href=\"https://github.com/Flutterando/auto_injector/\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/Flutterando/auto_injector/main/readme_assets/logo-auto-injection.png\" alt=\"Logo\" width=\"180\"\u003e\n  \u003c/a\u003e\n\n  \u003cp align=\"center\"\u003e\n    A simple way to inject dependencies in your project.\n    \u003cbr /\u003e\n    \u003c!-- Put the link for the documentation here --\u003e\n    \u003ca href=\"https://pub.dev/documentation/auto_injector/latest/\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003c!-- Disable unused links with with comments --\u003e\n    \u003c!--\u003ca href=\"https://pub.dev/publishers/flutterando.com.br/packages\"\u003eView Demo\u003c/a\u003e --\u003e\n    \u003c!-- The Report Bug and Request Feature should point to the issues page of the project, in this example we use the pull requests page because this is a github template --\u003e\n    \u003ca href=\"https://github.com/flutterando/auto_injector/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/flutterando/auto_injector/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003c!--  SHIELDS  ----\u003e\n\n\n\u003c!-- The shields here are an example of what could be used and are the most recommended, there are more below in the \"some recomendations about shields\" section. \nSee the links in the example below, changing the parts after img.shields.io you can change the content of the shields. Alternatively, go to the website and generate new shields.  \n\n[![Version](https://img.shields.io/github/v/release/flutterando/auto_injector?style=plastic)](https://pub.dev/packages/auto_injector)\n[![Pub Points](https://img.shields.io/pub/points/auto_injector?label=pub%20points\u0026style=plastic)](https://pub.dev/packages/auto_injector/score)\n[![Flutterando Analysis](https://img.shields.io/badge/style-flutterando__analysis-blueviolet?style=plastic)](https://pub.dev/packages/flutterando_analysis/)\n\n[![Pub Publisher](https://img.shields.io/pub/publisher/auto_injector?style=plastic)](https://pub.dev/publishers/flutterando.com.br/packages)\n\n\n\nThe ones used here are:\n- Release version\n- Pub Points\n- style: Flutterando analysis\n- publisher: Flutterando ---\u003e\n\n[![Version](https://img.shields.io/github/v/release/flutterando/auto_injector?style=plastic)](https://pub.dev/packages/auto_injector)\n[![Pub Points](https://img.shields.io/pub/points/auto_injector?label=pub%20points\u0026style=plastic)](https://pub.dev/packages/auto_injector/score)\n[![Flutterando Analysis](https://img.shields.io/badge/style-flutterando__analysis-blueviolet?style=plastic)](https://pub.dev/packages/flutterando_analysis/)\n\n[![Pub Publisher](https://img.shields.io/pub/publisher/auto_injector?style=plastic)](https://pub.dev/publishers/flutterando.com.br/packages)\n\u003c/div\u003e\n\n\u003c!----\nAbout Shields, some recommendations:\n+-+\nBuild - GithubWorkflow ou Github Commit checks state\nCodeCoverage - Codecov\nChat - Discord \nLicense - Github\nRating - Pub Likes, Pub Points and Pub Popularity (if still in early stages, we recommend only Pub Points since it's controllable)\nSocial - GitHub Forks, Github Org's Stars (if using Flutterando as the main org), YouTube Channel Subscribers (Again, using Flutterando, as set in the example)\n---\u003e\n\n\u003cbr\u003e\n\n---\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003c!-- Linked to every ## title below --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#sponsors\"\u003eSponsors\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#how-to-use\"\u003eHow to Use\u003c/a\u003e\u003c/li\u003e\n     \u003col\u003e\n      \u003cli\u003e\u003ca href=\"#dispose-singleton\"\u003eDispose Singleton\u003c/a\u003e\u003c/li\u003e\n      \u003cli\u003e\u003ca href=\"#modularization\"\u003eModularization\u003c/a\u003e\u003c/li\u003e\n      \u003cli\u003e\u003ca href=\"#param-transform\"\u003eParam Transform\u003c/a\u003e\u003c/li\u003e\n     \u003c/ol\u003e\n    \u003cli\u003e\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgements\"\u003eAcknowledgements\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n---\n\n\u003cbr\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\nAuto Injector is a Dart package that was created to make the developer's life easier, making the method of how to do dependency injection simpler and more practical.\nJust create the class that will be injected and declare it within some of the available \"add\" methods and that's it, you already have your dependency injection ready to use.\n\n\n\u003ci\u003eThis project is distributed under the MIT License. See `LICENSE.txt` for more information.\n\u003c/i\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- SPONSORS --\u003e\n\u003c!-- For now nZest is the only sponsor for Flutterando packages. The community is open to more support for it's open source endeavors, so check it out and make contact with us through the links provided at the end --\u003e\n## Sponsors\n\n\u003ca href=\"https://www.nzest.co/\"\u003e\n    \u003cimg src=\"https://cdn.discordapp.com/attachments/1305001560962633749/1349417507722625155/nZest-logo-2.png?ex=67d3067c\u0026is=67d1b4fc\u0026hm=a3c2c662c810458cff967656a5a02825d02d35a28887fb9c56c2476dca97d8ce\u0026\" alt=\"Logo\" width=\"200\"\u003e\n  \u003c/a\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\u003cbr\u003e\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n\u003c!---- The description provided below was aimed to show how to install a pub.dev package, change it as you see fit for your project ----\u003e\nTo get Auto Injector in your project follow either of the instructions below:\n\na) Add your_package as a dependency in your Pubspec.yaml:\n ```yaml\n   dependencies:\n     auto_injector: ^1.0.2\n``` \n\nb) Use Dart Pub:\n```sh\n   dart pub add auto_injector\n```\n\n\u003cbr\u003e\n\n\n## How to Use\n\n\u003c!---- In this section, provide a simple and short explanation of the base use of your project and a link to your documentation for more advanced uses ---\u003e\n\n\nRegister instances:\n\n```dart\nfinal autoInjector = AutoInjector();\n\nvoid main(){\n\n\n    // factory\n    autoInjector.add(Controller.new);\n    // Singleton\n    autoInjector.addSingleton(Datasource.new);\n    // lazySingleton\n    autoInjector.addLazySingleton(Repository.new);\n    // instance\n    autoInjector.instance('Instance');\n\n    // Inform that you have finished adding instances\n    autoInjector.commit();\n\n}\n\n\nclass Controller {\n    final Repository repository;\n\n    Controller(this.repository);\n}\n\nclass Repository {\n    final Datasource datasource;\n\n    Repository({required this.datasource});\n}\n\nclass Datasource {}\n\n```\n\nRegister instances with Key:\n\n```dart\n\nautoInjector.add(Controller.new, key: 'MyCustomName');\n\n```\n\n\nGet instance:\n\n```dart\n  // fetch\n  final controller = autoInjector.get\u003cController\u003e();\n  print(controller); // Instance of 'Controller'.\n\n  // or use calleble function (withless .get())\n  final datasource = autoInjector\u003cDatasource\u003e();\n  print(datasource); // Instance of 'Datasource'.\n```\n\nGet instance by key\n\n```dart\n  // fetch\n  final controller = autoInjector.get\u003cController\u003e(key: 'CustomController');\n  print(controller); // Instance of 'Controller'.\n```\n\nTry get instance:\n\n```dart\n  // use tryGet that returns null if exception.\n  final datasource = autoInjector.tryGet\u003cDatasource\u003e() ?? Datasource();\n  print(datasource); // Instance of 'Datasource'.\n```\n\nGet instance and transform params.\nThis can be used for example to replace an instance with a mock in tests.\n\n```dart\n  final datasource = autoInjector.get\u003cDatasource\u003e(transform: changeParam(DataSourceMock()));\n  print(datasource); // Instance of 'Datasource'.\n```\n\n### \u003cdiv id=\"dispose-singleton\"\u003eDispose Singleton\u003c/div\u003e\n\nSingletons can be terminated on request using the `disposeSingleton` method returning\nthe instance for executing the dispose routine.\n\n```dart\n\nfinal deadInstance = autoInjector.disposeSingleton\u003cMyController\u003e();\ndeadInstance.close();\n\n```\n\n### \u003cdiv id=\"modularization\"\u003eModularization\u003c/div\u003e\n\nFor projects with multiple scopes, try uniting the instances by naming them Module or Container.\nWith this, you can register specific instances for each module.\n\n```dart\n\n// app_module.dart\nfinal appModule = AutoInjector(\n  tag: 'AppModule',\n  on: (i) {\n    i.addInjector(productModule);\n    i.addInjector(userModule);\n    i.commit();\n  },\n);\n\n...\n\n// product_module.dart\nfinal productModule = AutoInjector(\n  tag: 'ProductModule',\n  on: (i) {\n    i.addInstance(1);\n  },\n);\n\n...\n\n// user_module.dart\nfinal userModule = AutoInjector(\n  tag: 'UserModule',\n  on: (i) {\n    i.addInstance(true);\n  },\n);\n\n...\n\nvoid main() {\n  print(appModule.get\u003cint\u003e());\n  print(appModule.get\u003cbool\u003e());\n}\n\n```\n\nIt is also possible to remove all singletons from a specific tag using the method\n`disposeSingletonsByTag` which reports each instance removed via an anonymous function:\n\n```dart\nautoInjector.disposeSingletonsByTag('ProductModule', (instance){\n  // individual dispose routine\n});\n```\n\n### \u003cdiv id=\"param-transform\"\u003eParam Transform\u003c/div\u003e\n\nThere is the possibility to listen and transform all the parameters that are being analyzed\nwhen there is an instance request (`AutoInject.get()`). Add transformers on the main instance:\n\n```dart\nfinal homeModule = AutoInjector(\n  paramTransforms: [\n    (param) {\n    if(param is NamedParam){\n        return param;\n    } else if(param is PositionalParam) {\n        return param;\n    }\n  ],\n);\n\n```\n\n\u003cbr\u003e\n### \u003cdiv id=\"bind-config\"\u003eBindConfig\u003c/div\u003e\n\nIf there is a need to configure the dispose and notifier of the bind,\nuse the `BindConfig\u003cT\u003e` property.\nThis is very useful if you want to automate class disposes like BLoC or Triple Store:\n\n```dart\nfinal injector = AutoInjector();\n\nfinal config = BindConfig\u003cBloc\u003e(\n  onDispose: (bloc) =\u003e bloc.close(),\n  onNotifier: (bloc) =\u003e bloc.stream,\n);\n\ninjector.addSingleton(ProductBloc.new, config: config);\n\n```\n\n\u003cbr\u003e\n\n_For more examples, please refer to the_ [Documentation](https://pub.dev/documentation/auto_injector/latest/) \n\n\u003c!---- You can use the emoji 🚧 to indicate Work In Progress sections ----\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- FEATURES --\u003e\n\n\u003c!---- Use this section to highlight your features and show  what is under progress. Use emojis for better communication if needed like ✅ for tasks done and 🚧 for Work In Progress ----\u003e\n## Features\n\n- ✅ Auto Dependency Injection\n- ✅ Factory Injection\n- ✅ Singleton Injection\n- ✅ Lazy Singleton Injection\n- ✅ Instance Injection\n\nRight now this package has concluded all his intended features. If you have any suggestions or find something to report, see below how to contribute to it. \n\n\u003c!---- \nWe suggest, in case of the roadmap of features has been completed, to include the text below:\n\nRight now this package has concluded all his intended features. If you have any suggestions or find something to report, see below how to contribute to it. \n----\u003e\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing \n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the appropriate tag. \nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\nRemember to include a tag, and to follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and [Semantic Versioning](https://semver.org/) when uploading your commit and/or creating the issue. \n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTACT --\u003e\n\n\u003c!---- Those are the current Flutterando contacts as of 25 August 2022 ---\u003e\n## Contact\n\nFlutterando Community\n- [Discord](https://discord.gg/qNBDHNARja)\n- [Telegram](https://t.me/flutterando)\n- [Website](https://www.flutterando.com.br)\n- [Youtube Channel](https://www.youtube.com.br/flutterando)\n- [Other useful links](https://linktr.ee/flutterando)\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- ACKNOWLEDGEMENTS --\u003e\n## Acknowledgements \n\n\nThank you to all the people who contributed to this project, whithout you this project would not be here today.\n\n\u003cbr\u003e\n\n\u003c!---- Change the link below to the contributors page of your project and change the repo= in the img src to properly point to your repository --\u003e\n\n\u003ca href=\"https://github.com/flutterando/auto_injector/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=flutterando/auto_injector\" /\u003e\n\u003c/a\u003e\n\n\u003c!-- Here is an alternative to the contributors page: https://allcontributors.org/\nAnd the link for the currently used option in this readme: https://contrib.rocks/ --\u003e\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- MANTAINED BY --\u003e\n## Maintaned by\n\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.flutterando.com.br\"\u003e\n    \u003cimg width=\"110px\" src=\"https://raw.githubusercontent.com/Flutterando/README-Template/master/readme_assets/logo-flutterando.png\"\u003e\n  \u003c/a\u003e\n  \u003cp align=\"center\"\u003e\n    Built and maintained by \u003ca href=\"https://www.flutterando.com.br\"\u003eFlutterando\u003c/a\u003e.\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n\u003c!-- [Choose an Open Source License](https://choosealicense.com)\n[GitHub Emoji Cheat Sheet](https://www.webpagefx.com/tools/emoji-cheat-sheet)\n[Malven's Flexbox Cheatsheet](https://flexbox.malven.co/)\n[Malven's Grid Cheatsheet](https://grid.malven.co/)\n[Img Shields](https://shields.io)\n[GitHub Pages](https://pages.github.com)\n[Font Awesome](https://fontawesome.com)\n[React Icons](https://react-icons.github.io/react-icons/search) \n\n[contributors-shield]: https://img.shields.io/github/contributors/othneildrew/Best-README-Template.svg?style=for-the-badge\n[contributors-url]: https://github.com/othneildrew/Best-README-Template/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/othneildrew/Best-README-Template.svg?style=for-the-badge\n[forks-url]: https://github.com/othneildrew/Best-README-Template/network/members\n[stars-shield]: https://img.shields.io/github/stars/othneildrew/Best-README-Template.svg?style=for-the-badge\n[stars-url]: https://github.com/othneildrew/Best-README-Template/stargazers\n[issues-shield]: https://img.shields.io/github/issues/othneildrew/Best-README-Template.svg?style=for-the-badge\n[issues-url]: https://github.com/othneildrew/Best-README-Template/issues\n[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=for-the-badge\n[license-url]: https://github.com/othneildrew/Best-README-Template/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://linkedin.com/in/othneildrew\n[product-screenshot]: images/screenshot.png\n[Next.js]: https://img.shields.io/badge/next.js-000000?style=for-the-badge\u0026logo=nextdotjs\u0026logoColor=white\n[Next-url]: https://nextjs.org/\n[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB\n[React-url]: https://reactjs.org/\n[Vue.js]: https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge\u0026logo=vuedotjs\u0026logoColor=4FC08D\n[Vue-url]: https://vuejs.org/\n[Angular.io]: https://img.shields.io/badge/Angular-DD0031?style=for-the-badge\u0026logo=angular\u0026logoColor=white\n[Angular-url]: https://angular.io/\n[Svelte.dev]: https://img.shields.io/badge/Svelte-4A4A55?style=for-the-badge\u0026logo=svelte\u0026logoColor=FF3E00\n[Svelte-url]: https://svelte.dev/\n[Laravel.com]: https://img.shields.io/badge/Laravel-FF2D20?style=for-the-badge\u0026logo=laravel\u0026logoColor=white\n[Laravel-url]: https://laravel.com\n[Bootstrap.com]: https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge\u0026logo=bootstrap\u0026logoColor=white\n[Bootstrap-url]: https://getbootstrap.com\n[JQuery.com]: https://img.shields.io/badge/jQuery-0769AD?style=for-the-badge\u0026logo=jquery\u0026logoColor=white\n[JQuery-url]: https://jquery.com  --\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterando%2Fauto_injector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflutterando%2Fauto_injector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutterando%2Fauto_injector/lists"}