MEF는 응용 프로그램 도메인 격리를 지원하지 않기 때문에 불행하게도, 심지어 재구성하는 동안, 이전에로드했던 그 어셈블리는 여전히 주요 웹 응용 프로그램의 응용 프로그램 도메인에로드됩니다. 이 ASP.NET에서 전투하는 당신이 필요로하는 것 두 가지이다 :
실제 파일의 변경 (예 : .ASPX, .cshtml 등), 또는 변경 파일 (의 .config)을 구성하거나 \ bin 디렉토리를 변경하면 응용 프로그램이 재활용됩니다. 이는 페이지/config 파일 모니터링과 \ bin 디렉토리 모니터링 (기본적으로 ASP.NET은 파일의 섀도 복사본을 사용하기 때문에 권장 됨)의 두 가지 때문입니다.
다른 AppDomain에서 MEF를 사용하려면 일련 번호 지정 또는 MarshalByRef
을 통한 엄청난 양의 크로스 도메인 통신이 필요합니다. 그 중 일부는 깨끗한 구현이라고 생각하지 않습니다. BuildProvider
인스턴스를 다른 AppDomain에서 페이지를 동적으로 컴파일하는 데 사용되는 인스턴스를 트리거하는 방법을 잘 모릅니다.
당신이 이것을 너무 많이 생각하고 있는지 궁금합니다. IIS6, HTTP.SYS가 들어오는 요청을 적절한 웹 사이트로 라우팅하는 것을 관리했기 때문에 이것은 커널 수준에서 처리됩니다. 주 응용 프로그램이 다시 시작된 경우 (이유가 여러 가지 이유가 있음)에도 요청이 삭제되지 않고 요청을 전달하기 전에 새 작업자 프로세스를 기다리는 대기열에 놓입니다. 물론, 사용자의 입장에서 보면 새 응용 프로그램이 다시 시작될 때까지 대기하는 유휴 시간이 있음을 알 수 있지만 현실적으로 얼마나 자주 이러한 변경 작업을 수행 할 예정입니까?
과도한 엔지니어링으로 많은 응용 프로그램 설계가 어려움. 모든 시나리오에 맞게 설계하고 싶지만 실제로는 단순하지만 확장 가능한 시스템을 유지하는 것이 더 쉽습니다. 내 의견으로는, 당신이 지정한 일을하고 싶다는 것은 over-engineering으로 분류 될 것입니다. 단순하게 유지하십시오.
간단히 말해서 수영장을 재활용 한 다음 새 어셈블리를 다시로드하는 것이 좋습니다. 내가 너를 제대로 이해하고 있니? – Mark
한마디로, 그렇습니다. 실망스러운 답변 일 수도 있지만 ASP.NET 응용 프로그램은 이러한 방식으로 실행되도록 설계되었습니다. 응용 프로그램에 대한 기능 세트를 계획 할 때 설계중인 기능이 가장 일반적인 사용 사례인지 여부를 고려해 볼 가치가 있습니다. 말이 돼? –
하위 웹 응용 프로그램 (중첩 된 웹 응용 프로그램)을 만들어서 부모가 아닌 자식 응용 프로그램을 재생할 수있는 아이디어가있었습니다. 그것에 대해 어떻게 생각하세요? 조금 더 많은 일이 있을지 모르지만 유연성이 더 좋습니까? – Mark