2016-10-18 7 views
0

나는 3 개의 라이브러리, lib1, lib2 및 lib3을 사용하는 응용 프로그램을 가지고 있습니다. 각 라이브러리에서 해당 라이브러리에 구현 된 종속성을 등록하는 Module을 구현했습니다.Autofac 모듈이 자체 종속 모듈을 등록해야합니까?

이러한 구현 중 일부는 고유 한 종속성이 있습니다. 예를 들어 lib2와 lib3은 모두 lib1에있는 구현이 필요할 수 있습니다.

제 질문은 lib2와 lib3의 모듈이 lib3의 모듈을 Load 구현의 일부로 등록하게합니까? 내 응용 프로그램이 lib2 및 lib3의 모듈을 등록하면이 모듈을 두 번 등록 할 예정입니까?

또는 모듈을 다른 모듈에 등록시키는 것을 삼가하고 시작시 일부 등록이 누락 될 수 있다는 단점을 앱에 남겨 두지 않습니까?

+0

이 질문은 도서관이 자체 등록을 등록했는지 여부와 관련이 없습니다. 그들은하지 않습니다. 그들은 단순히 컴포지션 루트에서 사용할 이러한 종속성을 등록하는 데 도움이되는 외관을 제공합니다. –

답변

0

Autofac는 구성 요소를 등록하는 데 도움이되는 외관에 불과합니다. 자체 등록의 종속성으로 알려진 구현을 등록하기 위해 다른 모듈을 호출해서는 안되며, 이는 두 모듈을 하나로 묶어 결합을 증가시키기 때문입니다.

또한 동일한 모듈을 여러 번 등록하면 Autofac에서 이미 등록 된 모듈을 추적하지 않으므로 등록 자체가 여러 번 적용됩니다. 컴퍼넌트 루트가 부주의로 기존의 것을 오버라이드 (override)하는 등록을 무효화하지 않는 한, 이것은 일반적으로 문제를 일으키지 않습니다.

1

일반적으로 구성을 포함하는 라이브러리는 하나만 있어야합니다. 이 라이브러리는 시작 프로젝트이며 응용 프로그램에서 모든 것이 유선으로 연결된이 위치는 일반적으로 Composition Root으로 참조됩니다. 일반적으로 시작 프로젝트 만 구성 루트를 가지며 단일 솔루션의 여러 시작 프로젝트가 많은 중복 등록을 공유하는 경우에만이 코드를 공통 위치에서 추출하여 해당 구성 루트가 다시 사용할 수 있습니다. 그러나 조심하십시오 : 일반적으로 Composition Roots should not be reused.

+0

물론,하지만 성분의 뿌리를 재사용하지는 않습니다. 라이브러리 안의 물건을 쉽게 등록 할 수 있도록 만든 facades를 재사용하고 있습니다. –

1

라이브러리 내의 등록을 권장하지 않습니다. 대부분의 경우 모든 응용 프로그램을 구성 할 하나의 composition root가 있어야합니다.

컴포지션 루트는 모듈이 함께 구성되는 응용 프로그램에서 (바람직하게) 고유 한 위치입니다.

이 개념은 여기에서 composition root으로 설명됩니다.

그런데 모듈을 여러 번 등록하면 Autofac에 구성 요소 멀티탭 시간이 등록됩니다. 라이브러리 내에 모듈이 있어야하는 경우 라이브러리의 구성 요소를 등록하는 모듈 만 작성해야합니다.

+0

글쎄, 내 솔루션에있는 각 응용 프로그램에 대해 하나의 복합 루트가 있습니다. 모든 등록 코드를 다시 작성할 필요가 없습니다. 그렇다면 모듈을 가지고있는 점은 무엇입니까? –

+0

모듈을 사용하여 등록을 구성 할 수 있습니다. 또한 이미 등록 된 구성 요소 또는 등록 소스에 연결하여 등록 동작을 수정할 수 있습니다. * Autofac * Module에 대한 자세한 내용은 http://docs.autofac.org/en/latest/configuration/modules.html을 참조하십시오. –