Agregar una fábrica de controladores a ASP MVC

Tengo una idea de diseño para un proyecto grande en el trabajo y creo que lo tengo resuelto, pero me encantaría obtener algunos comentarios sobre a) la idea en general, yb) la implementación propuesta.

La idea básica es simple: quiero crear una aplicación ASP MVC que se pueda extender en el futuro con controladores y vistas adicionales sin tener que volver a comstackr el código. La idea es tener una aplicación MVC con un conjunto básico de características y luego extender la funcionalidad agregando otra ‘Application.dll’ que contenga controladores, datos y lógica de negocios que sean específicos de esa aplicación. Las vistas simplemente se copiarán en el mismo directorio que la aplicación MVC principal durante la instalación.

El problema es que MVC realiza su enrutamiento en tipos dentro del mismo ensamblado, por lo que incluso si muevo las definiciones de enrutamiento a la base de datos, el MvcHttpHandler no podría enrutar nada al nuevo Dll ya que no “conoce” los tipos de controladores. en eso. Al mirar el código MVC, descubrí que para cargar los controladores simplemente llaman a Activator.CreateInstance que solo se ve en el ensamblado actual.

Mi solución es simple, pero tal vez me falta algo: anularé el MvcHttpHandler reemplazando ControllerFactory directamente (no estoy seguro de cómo hacerlo) o duplicando esa funcionalidad en una clase derivada. El nuevo código leerá la solicitud e intentará cargar el controlador primero desde el ensamblaje actual y luego desde los extendidos. Una vez que se encuentra el ensamblaje adecuado, usaré CreateInstance y le pasaré ese ensamblaje para obtener el controlador que quiero.

Al final de este artículo, se muestra cómo implementar su propia ControllerFactory. Básicamente, deriva de DefaultControllerFactory y luego lo conecta en Application_Start () en su global.asax.

No hay nada de malo en la idea de una fábrica de controladores, siempre y cuando sea simplemente por flexibilidad más adelante. El problema es cuando carga los controladores con código que pertenece a otras capas, que es una razón por la que podría “necesitar” la flexibilidad de otros controladores. Mientras no estés machacando capas juntas, no veo ningún problema real con la idea de fábrica.