A tiny (~2 KB) Inversion-of-Control Container for JS/TS.
What's this exactly?
featherioc is an Inversion-of-Control (IoC) container. It allows you to easily build a dependency graph for your application and inject dependencies where needed. Using an IoC container enforces various SOLID principles and decouples your application, which is critical if you want your application to be testable and modular.
Why do we need yet another IoC container library?
For Node-powered apps, InversifyJS and TSyringe among other libraries often do the job well enough. This library, however, fills the gap in the frontend development world. featherioc does not rely on the reflect-metadata polyfill and does not use decorators for service definitions.
No decorators? How come?
There are two reasons for this. The main reason for not having decorators is because that would otherwise break compatibility with ESBuild (see this issue) and thus, would break compatibility with Vite.
Another reason for not having decorators is because they tend to clutter the codebase quite fast; coworkers/others who have little to no experience with IoC may struggle with decorators such as @injectable
in codebases they're working on because they don't know what it means. featherioc leaves your classes as-is, which is a huge plus if you ask me.
What's already supported?
- Container registry
- Binding services
- Binding multiple services at the same time
- Scopes (Transient and Singleton)
-
useClass
provider for services -
useValue
provider for services -
useFunction
provider for services - Resolving services by token
- Use
Symbol
s as tokens - Constructor injection
What are you planning on supporting?
- More stuff I can't think of at the moment
What are you *not* planning on supporting?
- Property injection
- Decorators
See this document.
Kees van Voorthuizen