program story

스칼라에서 의존성 주입을 어떻게할까요?

inputbox 2020. 10. 22. 08:00
반응형

스칼라에서 의존성 주입을 어떻게할까요?


나는 자바 외에 스칼라를 배우는 데 아직 초기 단계에 있으며 DI를 어떻게해야하는지 이해하지 못했습니까? 기존 DI 라이브러리를 사용할 수 있거나 사용해야합니까? 수동으로 수행해야합니까 아니면 다른 방법이 있습니까?


표준 Java DI 프레임 워크는 일반적으로 Scala에서 작동하지만 언어 구조를 사용 하여 외부 종속성없이 동일한 효과얻을 수도 있습니다 .


Scala를위한 새로운 의존성 주입 라이브러리는 Dick Wall의 SubCut 입니다.

Dan Story의 답변에서 참조 된 Jonas Bonér 기사는 컴파일 타임 바인딩 인스턴스 및 정적 주입 (믹스 인을 통한)을 강조하지만 SubCut은 불변 모듈의 런타임 초기화 및 바인딩 된 모듈을 유형, 문자열 이름으로 쿼리하여 동적 주입을 기반으로합니다. 또는 scala. 기호 이름.

시작하기 문서 에서 Cake 패턴과의 비교에 대해 자세히 알아볼 수 있습니다 .


의존성 주입 자체는 도구, 프레임 워크 또는 컨테이너 지원없이 수행 할 수 있습니다. new코드에서 s 를 제거 하고 생성자로 이동하기 만하면됩니다. 남은 한 가지 지루한 부분은 컨테이너가 많은 도움을주는 "세계의 끝"에서 개체를 연결하는 것입니다.

Scala의 2.10 매크로를 사용하면 컴파일 타임에 배선 코드를 생성하고 자동 배선 및 형식 안전성을 가질 수 있습니다.

Scala 가이드종속성 주입 참조


최근 프로젝트는 순수하게 생성자 주입에 기반한 DI를 보여줍니다 : zalando / grafter

생성자 주입에 다시 무엇이 문제입니까?

Scala에서 종속성 주입 을 수행 하기 위한 많은 라이브러리 또는 접근 방식 이 있습니다 . Grafter는 생성자 주입을 사용하여 종속성 주입의 기본으로 돌아갑니다 . 리플렉션 없음, xml 없음, 주석 없음, 상속 없음 또는 자체 유형 없음.

그런 다음 Grafter는 생성자 주입에 필요한 지원을 추가합니다.

  • 구성에서 구성 요소 기반 응용 프로그램 인스턴스화
  • 배선 미세 조정 (싱글 톤 생성)
  • 구성 요소를 교체하여 응용 프로그램 테스트
  • 응용 프로그램 시작 / 중지

Grafter는 3 가지 아이디어를 연결하는 데 초점을 맞추기 때문에 가능한 모든 애플리케이션을 대상으로합니다.

  • 구성 요소에 대한 케이스 클래스 및 인터페이스
  • 구성을위한 판독기 인스턴스 및 형태 없음
  • 다른 모든 것에 대한 트리 재 작성 및 키 아마!

직접 해본 적은 없지만 대부분의 DI 프레임 워크는 바이트 코드 수준 (AFAIK)에서 작동하므로 모든 JVM 언어에서 사용할 수 있습니다.


이전 게시물에서 기술을 다뤘습니다. 저는 스칼라 언어 목표에 대한 Martin Odersky의 2014 년 5 월 강연 링크를 추가하고 싶었습니다. 그는 DI 컨테이너가 제대로 구현되지 않은 종속성을 주입하기 위해 "필요한"언어를 식별합니다. 개인적으로 동의하지만 의견 일뿐입니다. Scala 프로젝트에 DI 종속성을 포함하는 것이 비관 상적이라는 것을 나타내는 것처럼 보이지만 다시 한 번 의견입니다. 실제로는 기본적으로 종속성을 주입하도록 설계된 언어를 사용하더라도 컨테이너를 사용하여 일정량의 일관성을 얻을 수 있습니다. 목적에 따라 두 가지 관점을 모두 고려할 가치가 있습니다.

https://youtu.be/ecekSCX3B4Q?t=1154


Dan Story의 답변 외에도 언어 구조 만 사용하지만 Jonas의 게시물 : Value Injection on Traits 에는 언급되지 않은 DI 변형에 대해 블로그를 작성했습니다 . 이 패턴은 저에게 매우 잘 작동합니다.


여기서 2.10을 사용하여 scala에서 매우 간단한 기능적 DI 컨테이너를 만드는 방법을 보여주었습니다 .

참고 URL : https://stackoverflow.com/questions/2563929/how-would-one-do-dependency-injection-in-scala

반응형