https://github.com/shepherdwind/egg-di
Dependency injection lib for Egg.js.
https://github.com/shepherdwind/egg-di
Last synced: about 1 year ago
JSON representation
Dependency injection lib for Egg.js.
- Host: GitHub
- URL: https://github.com/shepherdwind/egg-di
- Owner: shepherdwind
- Created: 2018-03-13T06:53:00.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-09-29T09:15:04.000Z (almost 6 years ago)
- Last Synced: 2025-04-15T08:48:43.736Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 15.6 KB
- Stars: 50
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
Awesome Lists containing this project
README
## egg-di
[![build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]
[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]
[npm-image]: http://img.shields.io/npm/v/egg-di.svg?style=flat-square
[npm-url]: http://npmjs.org/package/egg-di
[download-image]: https://img.shields.io/npm/dm/egg-di.svg?style=flat-square
[download-url]: https://npmjs.org/package/egg-di
[travis-image]: https://img.shields.io/travis/shepherdwind/egg-di.svg?style=flat-square
[travis-url]: https://travis-ci.org/shepherdwind/egg-di
[coveralls-image]: https://img.shields.io/coveralls/shepherdwind/egg-di.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/shepherdwind/egg-di?branch=master
Dependency injection lib for [Egg.js](https://eggjs.org/).
### use
```typescript
// service
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
// other service
import { inject } from 'egg-di';
export class Foo extends Service {
@inject()
private readonly hackerNews: HackerNews;
bar() {
this.hackerNews.foo();
}
}
// other controller
import { inject } from 'egg-di';
export class Foo extends Controller {
@inject()
private readonly hackerNews: HackerNews;
bar() {
this.hackerNews.foo();
}
}
```
### circular dependency
```typescript
// Foo
export default class Foo {
@inject(() => Bar) readonly bar: Bar;
}
// Bar
export default class Bar {
@inject(() => Foo) readonly foo: Foo;
}
```
### test
Test injected service.
```typescript
// service
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
// hackernews.test.ts
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.
```typescript
// service
import { Context } from 'egg-di';
@Context
export class HackerNews extends Service {
foo() { }
}
// bar.test.ts
import { getComponent } from 'egg-di';
const app = mm.app();
ctx = app.mockContext();
const hackerNews: HackerNews = getComponent(HackerNews, ctx);
mm.data(hackerNews, 'foo', 'hello');
```