Awesome
Example of Dependency Injection with Interfaces
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.