Come separare il modello, vista e controllore in un'applicazione ASP.NET MVC in diverse assemblee
-
05-09-2019 - |
Domanda
Al momento sto cercando di entrare nel framework ASP.NET MVC.
Per la maggior parte delle mie applicazioni di test ho usato un unico gruppo / progetto. Questo ha funzionato bene per alcune applicazioni più piccoli. Poi mi sono chiesto come avrei potuto mettere il mio modello, classi controller e visualizzare in assemblee separate? Nel veramente grandi applicazioni web non è molto realistico per mettere tutto in un unico assembly / progetto.
Quindi la mia domanda è:? E 'possibile dire al framework ASP.NET MVC per la ricerca in un altro assembly per le viste e / o controllori senza perdere la flessibilità intrinseca del motore di routing
Soluzione
(sconosciuto) è corretta. Creare due progetti, una libreria di classi e di un progetto web MVC. Il progetto MVC dovrebbe fare riferimento la libreria di classi che contiene i controller e il codice dietro file (ASax globale, ecc). Ecco un esempio di layout.
La libreria di classi dovrebbe contenere solo i file Cs e senza vista (aspx / ascx file).
MyProject.BaseSite (class library) + Controllers - HomeController.cs - ... any other controllers - default.aspx.cs - global.asax.cs
progetto web MVC dovrebbe contenere configurazioni, viste, ecc e un riferimento alla tua libreria di classi
MyProject.ExampleSite + Content + scripts + css + images + Views + Home - index.aspx - .. other aspx files + Shared - Site.master - web.config
Ricordate i diversi spazi dei nomi. È quindi possibile creare più siti web Esempi che fanno riferimento allo stesso codice. Questo ti permette di pelle in modo efficace il vostro sito web in modo completamente diverso.
Altri suggerimenti
Creare un progetto di libreria di classi separato per ogni strato di responsabilità, compilare per creare l'assembly e quindi fare riferimento ogni nell'applicazione, se del caso.
Sì, se si utilizza uno dei supportato iniezione di dipendenza contenitori, poi i dati di configurazione specificano non solo la classe da caricare in risposta a una query particolare, ma anche il gruppo da cui deve essere caricata. Questo consente di dividere le vostre classi in su attraverso assemblee arbitrarie e MVC sarà ancora in grado di trovarli.
Anche se, naturalmente, la risposta più semplice fornito da Unknown (Google) funzionerà anche!
Mi rendo conto che questa è una domanda veramente vecchio, ma ho scritto un articolo su come esattamente quello che stai chiedendo
Solo completando @ risposta di David:
Se il progetto è gestito da NuGet
, dopo aver creato le librerie di classi, eseguire una copia del file packages.config
alla radice librerie di classi. In seguito, è necessario modificare ogni file packages.config
aggiunta o la rimozione dei pacchetti, in base alle esigenze di ciascuna libreria di classi.