ASP.NET MVC 사이트를 모듈 식으로 만드는 방법


14

ASP.NET MVC 4를 사용하여 직원 인트라넷 시스템을 구축하려는 계획 단계에 있습니다. 사이트는 별도의 "모듈"로 구성되어 각기 다른 기능을 제공합니다. 메시징, 급여 변경 등 컴파일시이 모듈을 활성화 또는 비활성화 할 수 있기를 바랍니다. 홈페이지에는로드되는 각 모듈에 연결되는 일종의 탐색 기능이 표시됩니다.

지금까지는 쉽지만 탐색 기능이 모듈에 대해 미리 알고 싶지는 않습니다. 다시 말해, 모듈을 동적으로 검색 할 수 있기를 원합니다. 새 모듈의 코드를 작성한 다음 소스의 다른 곳에서 코드를 변경하지 않고 탐색 표시 줄에 링크를 추가하고 싶습니다. 각 모듈에는 탐색 표시 줄에 등록 할 수있는 방법이 있어야하며, 더 중요하게는로드 할 때 각 모듈에 대해 수행해야합니다.

사이트의 레이아웃을 미리 알고있는 경우를 위해 설계되었으므로 MVC 영역을 사용할 수 없습니다. 사람들이 MEF와 MVC를 결합하는 데 성공한 것처럼 보이지만 MEF는 적절할 것 같습니다 . MEF가 실제로 여기가는 길입니까, 아니면 내가 원하는 것을 성취하는 더 좋은 방법이 있습니까?


좋은 질문입니다. 귀하의 솔루션이 아마도 리플렉션 사용과 관련이 있다고 생각합니다. 항목을 만들 때 여전히 영역을 사용할 수 있지만 메뉴를 작성하는 방법은 모든 유형을 가져 오기 위해 리플렉션을 사용해야합니다 (변경되는 코드를 저장하기 위해). 모두 동일한 인터페이스 IModule 인터페이스를 구현하면 어떨까요? 그런 다음 문제는없이 링크와 연관 있음을가는 방법을 정확하게 모든 당신이 링크에 필요한 모듈을 얻을 수있는 인터페이스의 모든 inheritants을 찾을 수 있는 추가 데이터? 음모가 두껍게 ...
mattytommo

1
CMS 내에서 CMS 관리를 수행하는 대신 빌드 타임에 CMS를 수행한다는 점을 제외하고는 CMS를 빌드하려는 것처럼 들립니다. 어떤 것이 나를 질문으로 인도합니까, 왜 빌드 타임에 그것을 끝내기를 원합니까?
James P. Wright

@ JamesP.Wright 글쎄, 내가 빌드 타임에 그것을하고 싶었던 이유는 사이트의 페이지를 통해이 기능을 노출하는 것보다 간단 해 보였기 때문입니다. 또한 사용되는 모듈 세트는 이러한 종류의 동적 선택에 추가 된 오버 헤드가 필요하지 않을 정도로 거의 변경되지 않습니다. 그러나 실제로 빌드시 모듈을 선택하는 것보다 더 중요한 것은 응용 프로그램 에서 모듈 을 찾을 수 있는 기능입니다. 첫 번째 장소는 내 질문의 추력입니다.
bdesham

nopCommerce ( nopcommerce.com/documentation.aspx )는 부분적으로 좋은 예입니다. 플러그인 작성 방법과 DI에 대한 접근 방식을 살펴보십시오.
Rui Marques

연구 목적으로 MEF와 MVC를 결합한 '혼합 된 성공'이 무엇인지 궁금했습니다. 현재 codeplex는 "아카이브에 저장"이므로 OP가 제공 한 링크가 더 이상 작동하지 않습니다. 다른 예비 누군가 시간 :에 대한 논의 탭에 'Microsoft.Composition를 통해 MVC4와 MEF2'에 대한 Ctrl 키 + F를 검색 archive.codeplex.com/?p=mef )
케빈

답변:


4

먼저 앱에 컴파일 된 모듈을 정적 생성자와 정적 멤버 시스템에있는 정적 멤버 목록으로 등록하는 데 사용되는 중앙 집중식 클래스가 있습니다. 모듈에는 메뉴 항목의 여부와 메뉴에 표시 할 순서를 나타내는 정적 속성이 있습니다.

각 모듈에는 중앙 집중식 클래스에서 모듈을 추적하는 자체 정적 생성자가 있습니다.

이 시스템을 직원들이 출입하는 시간 시계 시스템으로 생각하십시오. 그런 다음 급여 시간에 직원 수 등을 기준으로 모든 직원에게 지불하는 것을 알고 있습니다.

메타 속성 정보와의 관계에서 상속해야하는 모듈에 대한 인터페이스 계약이있는 경우 리플렉션을 사용할 수도 있습니다.

Warner Brothers Music에서 근무했으며 다양한 인코딩 형식의 내부 음악 처리 시스템을 수행했습니다. 상속을 사용하는 리플렉션으로 인코딩하기위한 일반 플러그인 모델을 만들었으므로 리플렉션으로 타입 캐스팅하여 클래스의 기본 메타 속성을 얻을 수 있습니다. 정적 중앙 집중식 클래스를 사용해 보지 않았습니다. 재미를 시도하는 또 다른 방법으로 무작위로 생각합니다.

또한 요구 사항의 기준과 함께 여러 클라이언트에 서비스를 제공하는 MVC를 사용했지만 수행하려는 작업과 유사한 향상된 기능을 사용했다고 덧붙였습니다. 대신 MVC를 컴파일하지 않고 App_Code를 사용하도록 변환했습니다. 중앙 집중식 컴파일없이 파일을 쉽게 밀어 낼 수 있습니다.

로컬로 컴파일하고 DLL을 푸시하지 않고 간단한 FTP 또는 GIT 푸시로 JIT를 활용할 수 있습니다.

스택 오버플로 에 대한 기사에 대한 링크는 다음과 같습니다.


그것은 내가 상상했던 것과 비슷하게 들립니다. 유일한 문제는 처음에 모듈을로드하는 방법입니다. 나는 그들 각자에게 중앙 반에 자신을 등록하라고 말하는 메커니즘은 무엇인가? 이것은 MEF가 적절한 것처럼 보이는 곳입니다.
bdesham

MEF가 더 좋습니다. 나는 그것을 보지 않고 아이디어를 주었지만 그 프로젝트를 할 때 나왔을 때 MEF를 사용했을 것입니다. 좋은 생각 인 것 같습니다. 왜 MEF와 MVC를 결합 할 수 없는지 모르겠습니다.
Jason Sebring

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.