Skip to main content

Some useful tips

Tips and Best Practices

To make the most out of Depinjionary, here are some helpful tips and best practices:

1. Type-Safe Resolution

The resolve method of the container supports a generic type parameter. This ensures type safety when resolving dependencies:

const calculatorService = container.resolve<CalculatorService>(CalculatorService);
calculatorService.calculate(5, 10); // Type-safe access to CalculatorService methods

This is especially useful when working with complex dependencies, as it helps prevent runtime errors by ensuring the resolved instance matches the expected type.


2. Handling Asynchronous Dependencies

The resolve method is promisified, meaning it will return either a Promise<T> for asynchronous dependencies or T for synchronous ones. This feature allows you to seamlessly handle both sync and async dependency resolution:

const asyncService = await container.resolve<AsyncService>(AsyncService);
console.log(await asyncService.performTask());

This flexibility ensures that even complex async initialization processes are handled cleanly.


3. Using Symbols for Interfaces

When binding implementations to interfaces, always use Symbol tokens to uniquely identify the dependency:

export interface LoggerInterface {
debug(data: string): void;
log(data: string): void;
}

export const LoggerInterface = Symbol('LoggerInterface');

Exporting a Symbol with the same name as the interface is a convenient TypeScript feature. It keeps your codebase consistent and avoids naming conflicts while making it clear what the token represents.


Conclusion

Depinjionary is a lightweight and powerful dependency injection container designed to streamline dependency management in your TypeScript applications. Its expressive configuration options—such as useClass, useValue, and useFactory—offer flexibility and control for both simple and complex use cases.

With support for both synchronous and asynchronous dependency resolution, Depinjionary ensures your application is equipped to handle real-world scenarios effectively. Its compatibility with both CommonJS and ESM modules makes it versatile and ready for modern JavaScript environments.

Whether you're building a small utility or a large-scale enterprise application, Depinjionary can help you maintain cleaner, more maintainable code. Try it out and experience the power of dependency injection in TypeScript!