2011-05-09 4 views
0

Unity IoC 컨테이너를 사용하는 MVC 웹 응용 프로그램에서 설정을 동적으로 전환하는 방법을 찾고 있습니다. ASP.NET MVC 및 IoC 구성 설정을 동적으로 변경하십시오.

나는 Global.asax.cs

private static IUnityContainer _container; 

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    InitializeUnityContainer(); 
} 

에 구성된 용기의 정적 인스턴스 다음 사용자 정의 컨트롤러 공장

protected override IController GetControllerInstance(
         RequestContext reqContext, Type controllerType) 
{ 
    // ... (some argument checking here) 

    return _container.Resolve(controllerType) as IController;   
} 

우리 모두가 자신의 데이터베이스를 사용하는 회사 내 다른 팀이 서버 (동일한 스키마 포함). 관리에서 제안 된 솔루션은 웹 앱의 여러 인스턴스를 실행하여 특정 팀의 URL로 이동하는 것입니다. 차라리 하나의 웹 응용 프로그램을 실행하고 팀이 어떤 데이터베이스 (및 기타 구성 설정)를 선택하여 응용 프로그램을 (이상적으로 드롭 다운 또는 메뉴의 일부 유형을 통해) 연결하려고합니다.

나는 내가이 생각을 acheive 수있는 방법으로 난처한 상황에 빠진 조금입니다. 통합 컨테이너는 각 팀마다 다르게 구성되어야합니다 (아마도 다중 인스턴스가 필요합니다). 컨트롤러에서 직접 액세스하는 다른 구성 설정을 변경해야합니다. 나는 이것이 상대적으로 공통적 인 문제라고 생각할 것입니다. 표준 해결책이 있습니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/1900415/what-is-the-best-way-to-dynamic-load-connection-strings –

+0

@ 마크 나는 그것이 전혀 중복되지 않는다고 생각합니다. . DI를 사용하면 모든 연결 문자열이 application_start에서 고정된다는 것을 이해하는 한 내 문제입니다. 사전/사용자 팀 또는 기타에 대해 어떻게/어디에서 조회 할 수 있습니까? Unity가 객체 루트에서 연결 문자열을 주입하고 있습니다. – fearofawhackplanet

+0

당신은 의존성에 런타임 값을 매핑해야합니다 http://stackoverflow.com/questions/1943576/is-there-a-pattern-for-initializing-objects-created-via-a-di-container/ 1945023 # 1945023 –

답변

1

나는 잘 작동 하나의 응용 프로그램의 모든 팀을 호스팅 생각하지 않는다 - 당신이 요청-범위되지 않은 아무것도 제대로 작동하지 않습니다 - 예. 응용 프로그램 범위의 데이터 또는 정적 필드는 첫 번째 방문자 만 설정하거나 지속적으로 오버라이드되는 문제를 일으킬 수 있습니다.

가장 깨끗한 방법은 동일한 코드베이스를 가리키는 경우에도 여러 개의 응용 프로그램을 만드는 것입니다.

+0

나는 그것에 대해 생각하지 못했습니다. 그것은 훌륭한 해결책이 될 것입니다. 어떻게 이루어 집니까? 그래서 내 모든 DLL,보기, JS 및 CSS 등의 파일을 공유하고 싶지만 다른 설정 파일 (및 추가로 다른 CSS 파일)을 사용하고 싶습니다. 그게 가능하니? – fearofawhackplanet

+0

IIS에서 동일한 폴더에있는 여러 응용 프로그램/사이트를 가리킬 수 있습니다. 다른 구성을로드하는 것이 Web.config에있는 경우 더 까다로울 수 있습니다. 호스트 헤더를 기반으로 다른 파일에서이 파일을로드 할 수 있는지 확실하지 않습니다 (그렇지 않은 경우 구성을 래핑해야하므로 호스트에 대한 액세스가 가능합니다). 머리글) –

관련 문제