1.0.1 • Published 7 years ago

beho v1.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

beho

Pseudo dependency injection, TypeScript (Browser/Node).

Install

npm install beho
#or
yarn add beho

Before

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

HowTo

inject

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

env

class A {
  @env('KEY') key: value;
}

const kernel = new Kernel({KEY: 'VALUE'});
console.log(kernel.get(A).key); // 'VALUE'

logger

import { inject, Logger, Kernel } from 'beho';

class A {
  @inject logger: Logger;
}

new Kernel()
  .get(A)
  .logger
  .info('Hello');

swap

import { inject, Logger, JSONLogger, Kernel } from 'beho';

class A {
  @inject logger: Logger;
}

new Kernel()
  .with({provide: Logger, use: JSONLogger})
  .get(A)
  .logger
  .info('Hello');

start/stop

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))