0

시작시 데이터베이스를 선택하고 구성 객체를 가져올 수있는 앱을 알고 있습니다.동적 구성 루트? DB 호출을 기반으로합니까?

그런 다음 해당 구성 객체를 실행하고, 여러 가지 객체를 처리하고, 다른 구성 객체를 가져 와서 루프 등에서 실행합니다.

지금 당장 할 수있는 모든 것을 구성하는 앱의 시작 부분에 구성 루트가 있습니다. 그러나 DB 호출 이후까지는 모든 것을 알지 못하기 때문에 그 지점 이후의 모든 객체 분기는 공장의 공장 뒤에 숨겨져 있으므로 config 객체에있는 모든 설정을 처리 할 수 ​​있습니다.

제 질문은 이것이 정상입니까? 대안으로 두 개의 구성 루트 또는 두 개의 DI 컨테이너가있는 것처럼 보입니다. 하나는 DB 호출 후, 하나는 DB 호출 후.

DB 호출 후 DI 루트를 수행 할 수 있다면 컨테이너에 직접 연결하여 내 코드에서 많은 양의 공장을 삭제할 수 있습니다. 나는 무엇이 필요할 지 확신하지 못한다. 그러나 그것은 이상하게 보입니다. 또한 각 반복마다 내 컨테이너 또는 두 번째 컨테이너를 다시 만들어야한다는 것을 의미합니다. 매우 이상하게 보입니다.

편집 : 나는 어떤 응답을하지 않았다, 그러나이었다 : http://structuremap.github.io/the-container/nested-containers/

편집 : 난 그냥 StructureMap 거의이 정확한 사용 사례에 대한 중첩 된 컨테이너 기능이 있습니다, 그래서 여기 뭔가에 확실히 해요 발견 어쨌든 나중에 대답 할 수 있습니다. 내 대답을 아래에 추가했습니다.

답변

0

그래서 이것은 비교적 일반적인 시나리오입니다.

첫 번째 단계는 내 응용 프로그램이 리팩토링되었지만 아직 가지고 있지 않은 사실로 인해 많은 혼란이 있었음을 인식하고있었습니다.

일단 완료되면 사전 및 사후 데이터베이스를 실행하는 코드를 별도의 응용 프로그램으로 볼 수 있습니다.

이 시점에서 기본적으로 두 가지 선택 사항이 있습니다. 나는 그것들을 별도의 앱으로 취급 할 수 있으며,이 경우에는 각각 독립적 인 디 루트를 갖게됩니다.

또는 다른 방법으로 코드를 계속 공유하고 중첩 된 컨테이너를 사용할 수 있습니다.

분명히 대부분의 IoC (예 : Unity, StructureMap 및 WindsorCastle 확인)에는 상위 컨테이너/구성 객체를 하위 프로젝트에 전달하고 해당 프로젝트 범위 내에있는 동안 특정 등록을 복제하고 오버라이드 할 수있는 방법이 있습니다.

그래서 내 초기 프로젝트는 데이터베이스 및 로깅 연결 등을 구성 할 수 있으며 각 하위 프로젝트 인스턴스는 데이터베이스 호출에서 다시 가져온 데이터에 따라 해당 공유 구성 인스턴스를 확장 할 수 있습니다.

내가 사용하고있는 IoC 인 SimpleInjector는이 작업을 수행 할 방법이 없다는 사실이 밝혀졌습니다. 혼란 스러움의 일부.