UNPKG

@codespeaks/tinydi

Version:

A simple and intuitive DI container, designed for simplicity, making dependency management seamless and easy to use.

100 lines (63 loc) 2.19 kB
# TinyDI Container 🚀 This library provides a simple implementation of dependency injection in TypeScript. ## Installation 📦 ```sh npm i @codespeaks/tinydi ``` ## Usage 🛠️ ### Import First, import the `createContainer` function: ```typescript import { createContainer } from '@codespeaks/tinydi' ``` ### Adding Classes to the Container You can add classes to the container using the `add` method. If the class has dependencies, you can use the `inject` method to specify them in the same order as you defined in the target class constructor. ```typescript class ProfileService { // ... } class RoleService { // ... } class User { constructor( private readonly profileService: ProfileService, private readonly roleService: RoleService ) { // ... } } const container = createContainer() container.add(ProfileService) container.add(RoleService) const user = container.add(User).inject(ProfileService, RoleService).getSelf() ``` ### Lifecycle You can specify the lifecycle of instances when registering them. By default, instances are singletons. To create transient instances, provide a factory as the second parameter of the `add` method. ```typescript class MyService { // ... } container.add(MyService, () => new MyService()) ``` ### Retrieving Instances To retrieve an instance of a registered class, use the `get` method: ```typescript const serviceA = container.get(ServiceA) const serviceB = container.get(ServiceB) ``` ## API 📚 ### `add<T>(classRef: ClassRef<T>, factory?: () => T)` Adds a class to the container. - `classRef`: The reference of the class to be added. - `factory`: (Optional) A factory function to create transient instances. ### `inject<T>(...depRefs: ClassRef[])` Injects dependencies into a registered class. - `depRefs`: The references to the dependency classes in the same order as defined in the target class constructor. ### `get<T>(classRef: ClassRef<T>): T` Retrieves an instance of the registered class. - `classRef`: The reference of the class to be retrieved. ### `getSelf(): T` Retrieves an instance of the added class. ## License 📄 This project is licensed under the MIT License.