Pseudo dependency injection, TypeScript (Browser/Node).
npm install beho
#or
yarn add beho
You should enable decorator in your tsconfig.json
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
}
You should use Promise and ReflectMetadata.
import 'reflect-metadata';
//or
import 'beho/polyfill/reflect';
import 'beho/polyfill/promise'; // if legacy browser
import { inject, Kernel } from 'beho';
class B { c = 'd' }
class A {
@inject b: B;
}
const kernel = new Kernel();
const a = kernel.get(A);
console.log(a.b.c); // d
class A {
@env('KEY') key: value;
}
const kernel = new Kernel({KEY: 'VALUE'});
console.log(kernel.get(A).key); // 'VALUE'
import { inject, Logger, Kernel } from 'beho';
class A {
@inject logger: Logger;
}
new Kernel()
.get(A)
.logger
.info('Hello');
import { inject, Logger, JSONLogger, Kernel } from 'beho';
class A {
@inject logger: Logger;
}
new Kernel()
.with({provide: Logger, use: JSONLogger})
.get(A)
.logger
.info('Hello');
import {createconnection} from 'my-super-db';
class Database {
connection;
async onStart() {
this.connection = await createconnection();
}
}
class MyApp {
@inject db: Database;
onStart() {
console.log(this.db.connection); // [Object o]
}
}
new Kernel()
.with(MyApp)
.start()
.catch(e => console.error(e))