Skip to content

Latest commit

 

History

History
133 lines (91 loc) · 2.93 KB

kr.md

File metadata and controls

133 lines (91 loc) · 2.93 KB

Flex-Injector

npm version

Flex-Injector는 의존성 주입을 간편하게 할 수 있도록 돕는 라이브러리입니다. 이 라이브러리는 TypeScript의 데코레이터 기능을 활용하여 의존성 관리를 쉽고 명확하게 할 수 있습니다.

createInjector를 사용하여 여러 개의 인젝터를 생성하고, 이를 통해 서로 다른 컨테이너로 의존성을 주입할 수 있습니다. 이는 특히 monorepo 환경에서 매우 유용합니다. 각 패키지나 모듈별로 독립적인 인젝터를 사용할 수 있어, 의존성 관리가 더욱 효율적이고 명확해집니다.

설치

  1. 모듈 설치:
npm install flex-injector
  1. 피어 종속성 설치:
npm install reflect-metadata
  1. tsconfig.json compilerOptions :
{
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true
}

사용 예

./service
├── todo.service.ts
├── user.service.ts
└── injector.ts
//  ./service/injector.ts

import { createInjector } from 'flex-injector';

const { InjectAble, inject } = createInjector();

export { InjectAble, inject };
//  ./service/todo.service.ts

import { InjectAble } from './injector';

@InjectAble
export class TodoService {

  async getTodo(userId:string) {
    return ...;
  }
}
//  ./service/user.service.ts

import { InjectAble } from './injector';

@InjectAble
export class UserService {

  constructor(private todoService: TodoService) {}


  async getTodo(userId:string) {
    return this.todoService.getTodo(userId);
  }

  async find(userId:string) {
    return ...;
  }
}
// express server example

const userService = inject(UserService);

app.get('/todo', async (req, res) => {
  const todoList = await userService.getTodo(req.session.userId);
  res.json(todoList);
});

❌ Bad Case

// 순환 참조 에러에 주의하세요. 아래는 순환 참조가 발생하는 나쁜 예시입니다.

const { inject, InjectAble } = createInjector();

@InjectAble
class A {
  constructor(private b: B) {}
}

@InjectAble
class B {
  constructor(private a: A) {}
}

const a = inject(A); // Throw Circular dependency detected

더 많은 예