2012-07-14 10 views
17

Ecco cosa voglio ottenere, voglio separare AREA di ASP.NET MVC come pura singola DLL.Come creare un'area ASP.NET MVC come DLL di plugin?

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

Ciascuno di essi sono individuali ASP.NET MVC Area, con la propria CSHTML predefinito o pagine ASPX. L'installazione, la migrazione e il mantenimento di molte pagine, incluse risorse, javascript e così via, sono un vero problema a lungo termine. Poiché la maggior parte di questi cambierà pochissimo.

Il mio sito web finale sarà così.

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

Senza aggiungere nulla, solo far cadere Blog.dll, la mia domanda dovrebbero sostenere/blog e tutte le sue pagine. Se voglio personalizzare qualcosa, di quanto io possa aggiungere zona, e aggiungere solo le pagine 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 

Questo aiuterà a riutilizzare ASP.NET Area Plugin, semplicemente lasciando cadere la dll nella cartella bin. Tuttavia web.config potrebbe richiedere alcune modifiche, ma molto probabilmente salveremo i valori di configurazione nel database e l'unica cosa necessaria sarà "Stringa di connessione di Entity Framework" in web.config.

mie sfide (domande)

  1. è possibile? Mi sembra sicuro, ma ci saranno problemi di riflessione/permessi?
  2. Come includere viste cshtml/aspx in una DLL? Versioni probabilmente compilate? Ho visto un paio di template di testo basati su View Engines su codeplex ma sono poco confuso su come effettivamente usarli.
  3. E come si ottiene ViewEngine per verificare innanzitutto se il file di directory fisica esiste o meno e quindi cercare in cshtml/aspx all'interno della dll stessa come file di risorse?

risposta

9

Si può prendere uno sguardo alla following article che illustra come un VirtualPathProvider personalizzato potrebbe essere utilizzato al fine di recuperare una vista rasoio che sono incorporati in assemblee separate come risorse.

+0

E il file aspx? Principalmente usiamo cshtml, ma per la stampa di PDF, cshtml non funziona con i tag html sconosciuti, quindi a volte usiamo aspx. –

+1

Non so su ASPX. È passato molto tempo da quando ho smesso di usarlo. Forse il provider di percorsi virtuali potrebbe essere adattato. –

+0

È possibile utilizzare EmbeddedResourceVirtualPathProvider che può essere installato direttamente da Nuget. Funziona con i file delle risorse. https://github.com/mcintyre321/EmbeddedResourceVirtualPathProvider#readme – mcintyre321

1

Forse vale la pena guardare le aree portatili da mvccontrib. Non li ho usati da MVC 2, ma ho trovato la seguente domanda di SO da qualcuno che ha qualche problema ad usarli con MVC 3, con alcune possibili soluzioni: ASP.NET MVC 3, Razor Views, and Portable Areas

1

MvcCodeRouting supporta ciò che si desidera, oltre a molte altre cose interessanti. Controlla this post sui plugin ASP.NET MVC.

Problemi correlati