💉Decorator-drivenMark a class with @Injectable, declare each dependency with @Inject, and resolve it with inject.
🧩Flexible providersBind any token to a class, useClass, useFactory, or useValue - resolved by token, not by position.
🏷️Typed tokensInject interfaces, primitives, and config through a typed InjectionToken - no reflect-metadata needed.
♻️ScopesChoose singleton for one shared instance or transient for a fresh instance on every resolution.
🌱No global stateMetadata and singletons live on the class itself, so there is no shared module-level container to reset.
🏭Custom factoriesReplace constructor instantiation with a factory that receives the resolved dependencies in order.