2009-02-20 2 views
11

직장에서 대형 프로젝트에 대한 설계 아이디어가 있습니다. 생각해 보았지만 생각에 대한 피드백을 많이 받고 싶습니다. 이행.컨트롤러 팩토리를 ASP MVC에 추가하기

기본 아이디어는 간단합니다. 코드를 다시 컴파일하지 않고도 추가 컨트롤러와 뷰를 사용하여 향후 확장 할 수있는 ASP MVC 응용 프로그램을 만들고 싶습니다. 하나의 MVC 응용 프로그램에 매우 기본적인 기능 집합을 포함시키고 해당 응용 프로그램에 특정한 컨트롤러, 데이터 및 비즈니스 논리가 포함 된 다른 'Application.dll'을 추가하여 기능을 확장하는 것이 아이디어입니다.

문제는 MVC가 동일한 어셈블리 내의 유형에 대한 라우팅을 수행하므로 라우팅 정의를 데이터베이스로 이동해도 MvcHttpHandler가 라우트 할 수 없기 때문입니다. MVC 코드를 살펴보면 현재 어셈블리에서만 보이는 Activator.CreateInstance를 호출하는 컨트롤러를로드하는 것으로 나타났습니다.

내 솔루션 간단하지만 어쩌면 나는 뭔가를 놓치고있다. 나는 ControllerFactory를 직접 (확실하지 않은 방법으로) 대체하거나 파생 된 클래스에서 그 기능을 복제함으로써 MvcHttpHandler를 오버라이드 할 것이다. 새 코드는 요청을 읽고 현재 어셈블리에서 컨트롤러를로드 한 다음 확장 된 컨트롤러에서 컨트롤러를로드하려고 시도합니다. 일단 적절한 어셈블리가 발견되면 CreateInstance를 사용하여 그 어셈블리를 전달하여 원하는 컨트롤러를 얻습니다.

답변

6

this article의 끝 부분에는 자체 ControllerFactory 구현 방법이 나와 있습니다. 기본적으로 DefaultControllerFactory에서 파생 된 다음 global.asax의 Application_Start()에서 와이어 링합니다.

+0

감사합니다. 그게 내가 찾고 있던거야. – Gil

1

컨트롤러 팩토리의 아이디어는 나중에 유연성 만있는 것이 아니라면 아무 것도 없습니다. 문제는 당신이 다른 컨트롤러에 융통성이 필요할 수있는 이유 중 하나 인 다른 레이어에 속한 코드로 컨트롤러를로드 할 때 발생합니다. 레이어를 매끄럽게 만들지 않는 한 공장 아이디어에 대한 실질적인 문제는 없습니다.