Custom Dependency injection for TypeScript. Was made for deeper learning Angular.
Wrap classes into Injectable
decorator.
@Injectable()
class FirstService {}
@Injectable()
class SecondService {}
Use static method create
in Injector
class for create injector with DI scope.
const injector = Injector.create(
[
FirstService,
SecondService
],
);
For inject one class into another, set injectable class into constructor of class where you want to inject.
@Injectable()
class SecondService {
constructor(
private readonly firstService: FirstService
) {}
}
Use method get
in created injector
for get some instance.
const secondService = injector.get<SecondService>(SecondService);
You can create token and provide class|value|factory
.
const token = new InjectionToken('some description');
const injector = Injector.create(
[
...
{
provide: token,
useValue: 'some text'
},
],
);
And for provide it into class use @Inject
decorator.
@Injectable()
class SecondService {
constructor(
@Inject(token)
private readonly someText: string
) {}
}
You can provide some providers by one token, then you will get array of values.
const injector = Injector.create(
[
...
{
provide: token,
useValue: 'some text'
},
{
provide: token,
useValue: 'some new text'
},
],
);
@Injectable()
class SecondService {
constructor(
@Inject(token)
private readonly someText: string
) {
console.log(this.someText); // ['some text', 'some new text']
}
}