nexus-ioc
v0.2.4
Published
A powerful IoC container for TypeScript applications
Downloads
376
Maintainers
Readme
Nexus IoC is a powerful and flexible Inversion of Control (IoC) container for TypeScript applications. Inspired by Angular and NestJS, it leverages decorators to provide a simple and efficient way to manage dependencies and modules.
Table of Contents
Features
- Modular Architecture: Easily create and manage modules.
- Dependency Injection: Use decorators to inject dependencies into your classes.
- Lifecycle Management: Manage the lifecycle of your components seamlessly.
- Asynchronous Module Loading: Load modules asynchronously for improved performance.
Installation
npm install nexus-ioc reflect-metadata
Quick Start
Step 1: Define Your Modules and Providers
Create a module and a provider using decorators.
import { NsModule, Injectable, Inject } from 'nexus-ioc';
@Injectable()
class DependencyService {
public readonly name = 'World';
}
@Injectable()
export class AppService {
constructor(
@Inject(DependencyService)
private readonly dependencyService: DependencyService,
) {
}
getHello(): string {
return `Hello ${this.dependencyService.name}!`;
}
}
@NsModule({
providers: [AppService, DependencyService],
})
export class AppModule {}
Step 2: Create an Application
Create and bootstrap your application.
import { NexusApplicationsBrowser } from 'nexus-ioc/dist/server';
import { AppModule, AppService } from './app.module';
async function bootstrap() {
const app = await NexusApplicationsBrowser
.create(AppModule)
.bootstrap();
const appService = app.get<AppService>(AppService);
console.log(appService?.getHello());
}
bootstrap();
Testing
Installation
npm install nexus-ioc-testing
Usage
import { Injectable } from 'nexus-ioc';
import { Test } from 'nexus-ioc-testing';
describe('AppModule', () => {
it('should create instance', async () => {
@Injectable()
class AppService {}
const appModule = await Test.createModule({
providers: [AppService],
}).compile();
const appService = await appModule.get<AppService>(AppService);
expect(appService).toBeInstanceOf(AppService);
});
});
License
This project is licensed under the MIT License. See the LICENSE file for details.
Author
Isqanderm (Aleksandr Melnik) - LinkedIn
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
Acknowledgements
Special thanks to the developers of Angular and NestJS for the inspiration.
Wiki
For more detailed documentation, please visit the Wiki.