최근에 MVC 애플리케이션이 Unity 종속성 삽입을 사용하여 종속성을 해결하도록 리팩터링했습니다. 그것은 훨씬 더 분해 가능합니다.Unity - 의존성 문제를 해결하기 위해 요청한 정보를 사용합니다.
내가 지금하고있는 일은 그것을 사용하는 여러 임차인을위한 능력을 추가하는 것입니다. 내가 사용하고있는 접근법 (나머지 코드는 세입자에 대해 많이 알 필요가 없도록)은 다른 저장소의 프록시 인 저장소 인터페이스의 세입자 필터링 버전과 같은 것을 생성합니다. 그래서 기본 메소드 중 하나를 호출 한 다음 레코드에 올바른 세입자가 있는지 확인하고 그에 따라 행동하십시오. 따라서 기본적으로 데이터가 분리되어 있지 않아도 클라이언트 코드를 변경해야 할 필요가 없더라도 각 테넌트에 대해 완전히 별개의 저장소가있는 것을 에뮬레이트 할 수 있습니다.
이 모든 문제는 DI 작업 방식에 어떻게 부합되는지입니다. 내가하려는 계획은 요청이 시작될 때 호스트 이름을 감지 한 다음이를 사용하여 임차인을 결정하는 것입니다 (각 임차인은 DB에 호스트 이름 목록을 갖게됩니다). 대부분의 객체에 대해 요청 당 수명을 사용하고 있지만, Unity는 구성 및 해결 중입니다. 요청에 대한 데이터가 필요하기 때문에 Unity가 어떻게 사용하는지 "알 수"있습니다. 가지고 있지만 컨테이너 구성 방법에서 사용 가능하지 않다고 생각합니다.) 그리고 데이터베이스에 액세스하여 어느 호스트를 알 수 있습니까 (컨테이너 구성에서 데이터베이스 호출을하는 것이 바람직하지 않음). # 2를 해결할 수있는 것은 단지 호스트 이름을 전달하고 세입자와 클래스를 작성하여 어느 세입자가 참조되고 있는지를 파악할 수 있지만 # 1에서는 도움이되지 않습니다.
지금은 "속성 주입"(덜 높은 falutin '서클에서 "공용 속성"으로도 알려짐)을 사용하고 있지만 컨트롤러를 사용하지 않도록하는 방법을 알지 못합니다. 실제로 세입자 데이터를 입력하는 곳입니다. 이제는 모든 것을 제어하는 하나의 구성 루트가 없습니다.
구성 루트에서이 작업을 수행 할 수있는 방법이 있습니까? 아니면 컨트롤러에서이 작업을 수행하도록하는 것이 좋습니다.
그런데 어떻게 그 방법으로 URL을 찾을 수 있습니까? 이 시점에서 범위에 있지 않습니까? – Casey
나는이 방법으로 내 문제를 간결하게 설명 할 수 있다고 생각한다. 내가하고 싶은 일을하기 위해서, 나는 composition root 내에서 요청 데이터에 접근 할 필요가있다. 그러나 내가 아는 한 내가 접근 할 권한이 없다. 컨테이너를 구성 할 때 현재 요청 컨텍스트 중 하나. – Casey
'HttpContext.Current.Request.Url' –