Example of Dependency Injection with Interfaces
January 7, 2019 ยท View on GitHub
This is an example app that test dependency injection with interfaces. It uses https://github.com/YePpHa/ts-di-transformer to demonstrate that it's possible without needing to use annotations.
How to start this program
Yarn
$ yarn
$ yarn start
NPM
$ npm install
$ npm run start
How does it work?
The project https://github.com/YePpHa/ts-di-transformer will transform the code
on compile-time. However, this requires the custom transformer to be used that's
included in ts-di-transformer.
This example is directly calling the TypeScript API to apply the custom transformer. However, if you're using webpack you can use awesome-typescript-loader.
Bootstraping
All interfaces must be declared before starting the app. This can be done as in
/src/main.ts:
[...]
const bootstrap = new Container();
bootstrap.bind(InterfaceSymbol<IHttp>(), Http);
bootstrap.bind(InterfaceSymbol<ITodoService>(), Todo);
bootstrap.resolve(App).run();
Notice that each implementation of an interface must be declared before calling
.resolve(App). If they're not called it will result in an runtime error as the
dependency system will not be able to find the implementation.