2012-07-14 14 views
17

Esto es lo que quiero lograr, quiero separar áreas de ASP.NET MVC como una sola DLL.¿Cómo crear el área ASP.NET MVC como un complemento DLL?

  1. Blog.DLL
  2. Forums.DLL
  3. FAQ.DLL

Cada una de ellas son individuales ASP.NET MVC Área, con su propia CSHTML por defecto o páginas ASPX. Instalar, migrar y mantener muchas páginas, incluidos recursos, javascripts, etc., son un verdadero dolor a largo plazo. Como la mayoría de estos apenas cambiará.

Mi sitio web final será así.

\MvcApplication 
    \bin 
     \MvcApplication.bin 
     \Blog.dll 
     \Forums.dll 
    \Controllers 
     \.. 
    \Models 
     \.. 
    \Views 
     \.. 
    \Global.asax 
    \Web.config 

Sin agregar nada, simplemente soltando Blog.dll, mi aplicación debe ser compatible con/blog y todas sus páginas. Si quiero personalizar algo, de lo que puedo añadir zona, y añadir sólo las páginas cshtml ..

\MvcApplication 
    \bin 
     \MvcApplication.bin 
     \Blog.dll 
     \Forums.dll 
    \Areas 
     \Blog 
      \Views 
       \Shared 
        \BlogLayout.cshtml <-- this will override the look 
    \Controllers 
     \.. 
    \Models 
     \.. 
    \Views 
     \.. 
    \Global.asax 
    \Web.config 

Esto ayudará en la reutilización de ASP.NET Área plugins, más que soltar el archivo DLL en la carpeta bin. Sin embargo, web.config puede requerir algunos cambios, pero lo más probable es que guardemos los valores de configuración en la base de datos y solo lo necesario será "cadena de conexión de Entity Framework" en web.config.

Mis retos (preguntas)

  1. es posible? Seguro que me parece, pero ¿habrá algún problema de reflexión/permiso?
  2. ¿Cómo incluyo las vistas cshtml/aspx dentro de una DLL? ¿Probablemente versiones compiladas? He visto un par de plantillas de texto basadas en View Engines en Codeplex pero no estoy muy seguro de cómo usarlas.
  3. ¿Y cómo hago para que ViewEngine compruebe primero si el archivo de directorio físico existe o no y luego miro dentro de cshtml/aspx dentro del dll mismo como archivo de recursos?

Respuesta

9

Usted puede echar un vistazo a la following article que ilustra cómo un VirtualPathProvider personalizada podría ser utilizado con el fin de recuperar los puntos de vista de afeitar que están incrustados en conjuntos separados como recursos.

+0

¿Qué pasa con el archivo aspx? Principalmente solo usamos cshtml, pero para imprimir PDF, cshtml no funciona con etiquetas html desconocidas, por lo que usamos aspx algunas veces. –

+1

No sé sobre ASPX. Ha pasado mucho tiempo desde que dejé de usarlo. Tal vez el proveedor de ruta virtual podría ser adaptado. –

+0

Puede usar EmbeddedResourceVirtualPathProvider que se puede instalar directamente desde Nuget. Funciona con archivos de activos. https://github.com/mcintyre321/EmbeddedResourceVirtualPathProvider#readme – mcintyre321

1

Tal vez vale la pena mirar las áreas portátiles de mvccontrib. No los he usado desde MVC 2, pero encontré la siguiente pregunta SO por alguien que tiene algunos problemas al usarlos con MVC 3, con algunas soluciones posibles: ASP.NET MVC 3, Razor Views, and Portable Areas

1

MvcCodeRouting es compatible con lo que desee, además de muchas otras cosas interesantes. Consulte this post sobre ASP.NET MVC Plugins.

Cuestiones relacionadas