데코레이터 없이 의존성 주입

저는 프런트 엔드로 많은 작업을 하고 있기 때문에 종속성 주입의 열렬한 팬입니다. 데코레이터를 기반으로 하지 않고 파일 크기가 작은 종속성 주입 라이브러리가 필요했습니다. 도저히 찾을 수가 없어서 제가 직접 만들었습니다.

그것은 Pumpa라고 불리며 약 2KB이며 이것이 작동하는 방식입니다.

class A {
  static inject=[B]
  constructor(public b:B){}
}
class B {}

const container = new Pumpa()

container.bindClass(A,A)
container.bindClass(B,B)

const instanceA = container.resolve<A>(A)


함수 팩토리를 등록할 수도 있습니다.

class B{}

function myFactory(b: B) {
  return function resolvedFunction() {
    // do something with b
  }
}

myFactory.inject = [B]

container.bindFactory(myFactory, myFactory)

const fn = container.resolve(myFactory)
fn === resolvedFunction


컨테이너에 값을 등록하는 다른 방법도 있습니다. 등록하려는 값(타사 라이브러리)에 액세스할 수 없을 때 특히 유용합니다.

class A {
  //note: there is no static inject property on the class
  constructor(public b:B){}
}
class B {}

const container = new Pumpa()

//alternative way of registering
container.bindClass(A,{value:A,inject:[B]})
container.bindClass(B,B)

const instanceA = container.resolve<A>(A)
instanceA.b === B


또한 종속성 배열 주입도 지원합니다.

class A {
  static inject = [getArray([A, B, C])]
  constructor(deps: [A, B, C]) {}
}


그리고 그것이 요점입니다.

Typescript로 작성되었으며, Microsoft tsyringe(이전에 사용했던)과 유사하게 모델링되었습니다.

설명서에 많은 시간을 할애했으므로 Github repository으로 이동하여 라이브러리에서 수행할 수 있는 다른 작업을 확인하십시오.

저는 새로운 아이디어와 풀 리퀘스트에 열려 있습니다.

좋은 웹페이지 즐겨찾기