@wspro/di
v1.0.3
Published
Simple DI
Downloads
7
Readme
Минималистический DI
Пример использования
// файл service1.ts
import { Injectable } from '@wspro/di';
@Injectable()
export class Service1 {}
// файл service2.ts
import { Injectable, OnCreatedApplication } from '@wspro/di';
import { Service1 } from './service1';
@Injectable()
export class Service2 implements OnCreatedApplication {
constructor(private service: Service1) {}
// Допустимо - public onCreatedApplication(): void {}
public async onCreatedApplication(): Promise<void> {
// метод вызывается после создания всех инстансов
...
}
public publicMethod(): void {}
}
// файл service3.ts
import { Injectable, OnReadyApplication } from '@wspro/di';
import { Service1 } from './service1';
@Injectable()
export class Service3 implements OnReadyApplication {
constructor(private service: Service1) {}
// Допустимо - public onReadyApplication(): void {}
public async onReadyApplication(): Promise<void> {
// метод вызывается после готовности приложения
...
}
}
// файл service4.ts
import { Inject, Injectable, OnReadyApplication } from '@wspro/di';
import { Service1 } from './service1';
import { Service2 } from './service2';
@Injectable()
export class Service4 {
@Inject(Service1)
protected service1: Service1;
constructor(private service2: Service2) {}
}
@Injectable()
export class Service5 {
constructor(private service2: Service2) {
super(service2);
...
}
// в классе проинициализирован this.service1 через свойство родителя
// без необходимости его проброса в конструкторе через super(...)
}
// файл application.ts
import { Application } from '@wspro/di';
import { Service2 } from './service2';
import { Service3 } from './service3';
import { Service5 } from './service4';
@Application()
export class AppService {
constructor(
private service2: Service2,
private service3: Service3,
private service5: Service5,
) {}
// Рабочие методы класса приложения
public startApplication(): void {
...
}
}
// файл main.ts
import { AppFactory } from '@wspro/di';
import { AppService } from './application';
async function bootstrap(): Promise<void> {
await AppFactory.create<AppService>(AppService);
const app = AppFactory.getApplication<AppService>();
// Альтернативный вариант
// const app = await AppFactory.create<AppService>(AppService);
app.startApplication();
}
bootstrap().catch((error) => console.error(error));
// файл functions.ts
import { AppFactory } from '@wspro/di';
import { Service2 } from './service2';
function extFunction(): void {
const service = AppFactory.getInstance<Service2>(Service2);
// можно работать с injected-инстансом класса Service2
service.publicMethod();
}