Estoy en la etapa de planificación para construir un sistema de intranet para empleados con ASP.NET MVC 4. Nos gustaría que el sitio constara de "módulos" separados, cada uno de los cuales proporciona una característica diferente: mensajes, cambios de nómina, etc. Me gustaría que estos módulos se puedan habilitar o deshabilitar en tiempo de compilación. La página de inicio mostrará algún tipo de navegación que se vinculará a cada módulo que se carga.
Eso es fácil hasta ahora, pero no quiero que la función de navegación tenga que conocer los módulos de antemano. En otras palabras, quiero que los módulos sean dinámicamente detectables; Quiero poder escribir el código para un nuevo módulo y luego agregar un enlace a la barra de navegación sin cambios de código en ningún otro lugar de la fuente. Cada módulo debe tener alguna forma de registrarse en la barra de navegación y, lo que es más importante, esto debe hacerse para cada módulo a medida que se carga.
Creo que esto impide usar las áreas de MVC, ya que están diseñadas para el caso cuando el diseño del sitio se conoce de antemano. MEF parece que podría ser apropiado, aunque las personas parecen haber tenido un éxito mixto al combinar MEF con MVC. ¿MEF es realmente el camino a seguir aquí, o hay una mejor manera de lograr lo que necesito?
fuente
Respuestas:
Primero tendría una clase centralizada que se usa para que la aplicación registre módulos compilados con un constructor estático y una lista de módulos miembro estáticos que estaban en el sistema. Los módulos tendrían una propiedad estática que indica si es un elemento de menú o no y en qué orden debería aparecer en el menú.
Cada módulo tendría su propio constructor estático que se notaría en la clase centralizada que realiza un seguimiento de los módulos.
Piense en este sistema más como un sistema de reloj de tiempo en el que los empleados entran y entran. Luego, a la hora de la nómina, sabemos pagar a todos los empleados en función de quién registró, etc.
La reflexión también se podría usar si tiene un contrato de interfaz en los módulos que deben heredar de esa información de meta propiedades.
Trabajé para Warner Brothers Music e hice un sistema interno de procesamiento de música para diferentes formatos de codificación. Hice un modelo de complemento genérico para codificar con reflexión que usaba herencia para que pudiera ser encasillado con reflexión para obtener las meta propiedades básicas de la clase. Sin embargo, no he intentado usar una clase estática centralizada. Simplemente pensé en eso al azar como otra forma de intentar divertirnos.
También agregaría que he usado MVC sirviendo a múltiples clientes con una línea base de requisitos, pero también con características mejoradas similares a lo que está tratando de hacer. En cambio, convertí el MVC para usar App_Code en lugar de requerir una compilación. Es más fácil sacar archivos de esta manera sin necesidad de una compilación centralizada.
Puede aprovechar JIT con FTP simple o GIT push en lugar de tener que compilar localmente y enviar DLL.
Aquí hay un enlace a ese artículo sobre desbordamiento de pila
fuente
Es posible que desee ver el uso de MEF con MVC. Esto le daría la capacidad de Agregar - Eliminar según sea necesario sin tener que volver a compilar o implementar. Como de costumbre, Scott es un buen lugar para comenzar: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx
fuente