egg-di
![npm download](https://img.shields.io/npm/dm/egg-di.svg?style=flat-square)
Dependency injection lib for Egg.js.
use
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
import { inject } from 'egg-di';
export class Foo extends Service {
@inject()
private readonly hackerNews: HackerNews;
bar() {
this.hackerNews.foo();
}
}
import { inject } from 'egg-di';
export class Foo extends Controller {
@inject()
private readonly hackerNews: HackerNews;
bar() {
this.hackerNews.foo();
}
}
circular dependency
export default class Foo {
@inject(() => Bar) readonly bar: Bar;
}
export default class Bar {
@inject(() => Foo) readonly foo: Foo;
}
test
Test injected service.
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
import { getComponent } from 'egg-di';
describe('service/HackerNews.test.js', () => {
const app = mm.app();
let ctx: Context;
let hackerNews: HackerNews;
before(async () => {
await app.ready();
ctx = app.mockContext();
hackerNews = getComponent(HackerNews, ctx);
});
it('getTopStories', async () => {
const list = await hackerNews.getTopStories();
assert(list.length === 30);
});
});
Mock injected service.
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
import { getComponent } from 'egg-di';
const app = mm.app();
ctx = app.mockContext();
const hackerNews: HackerNews = getComponent(HackerNews, ctx);
mm.data(hackerNews, 'foo', 'hello');