Struttura del Progetto InCore


Libreria delle funzioni base

Questo progetto contiene tutta la parte di base di InCore, tutte le funzionalità C# del framework di Ingage. Il progetto è stato separato per evitare che tutte le nostre implementazioni fossero da consegnare al cliente in caso se ne fosse andato.

Di seguito la struttura del progetto:

La cartella Core\Base contiene i Controller di base da cui derivano tutti gli altri.

  • Core => Base => InCoreBaseController
    • Questo Controller contiene tutte i servizi di base Core, le Breadcrumbs, le funzioni di Tracciamento delle chiamate alle Actions, le chiamate delle Notifiche e le Actions standard come _ModalOk e Error.
  • Core => Base => InCoreBaseContextController
    • Questo Controller aggiunge il Contesto, le informazioni di Ambiente e le utilità per la generazione dei PDF a partire dalle Viste.
  • Core => Base => InCoreBaseFileController
    • Questo Controller contiene il Contesto, le informazioni di Ambiente e le utilità base per la gestione dei files come le funzioni di Uploads, UploadsFromModel, Download, Visualizzazione dei files, la gestione della cartella di destinazione divisa per anno, mese e giorno.
    • Questa Classe è astratta e contiene tutti i metodi che bisogna implementare per gestire le logiche personalizzate.
  • Core => Base => InCoreBaseApiController
    • Questo Controller al momento non aggiunge altre funzionalità.
  • Core => Base => InCoreBaseCalendarController
    • Questo Controller contiene il Contesto e le utilità per la gestione degli appuntamento del Calendario (spostamento, ridimensionamento e passaggio appuntamenti alla libreria).

La cartella Core contiene i Controller per le operazioni standard della Library.

  • Core => InCoreAdminController
    • Questo Controller contiene tutte le funzioni Amministrative per la gestione delle impostazioni presenti nei file JSON di configurazione come Menu, E-mail, Ruoli, Permessi e Utenti.
  • Core => InCoreAuthController
    • Questo Controller contiene tutte le funzioni di Autenticazione come Login, Logout, Recupero Password, Reset Password e altre.
  • Core => InCoreAvatarController
    • Questo Controller contiene tutte le funzioni per la gestione degli Avatar degli Utenti.
  • Core => InCoreReportsController
    • Questo Controller contiene tutte le funzioni per la gestione e la generazione dei Report personalizzati.

La root della cartella contiene i Controller per le operazioni definite nella Library.

  • CalendarEventController
    • Questo Controller contiene tutte le operazioni CRUD e i metodi per la gestione del Calendario. Funge anche da esempio di implementazione di InCoreBaseCalendarController.
  • ContactController
    • Questo Controller contiene tutte le operazioni CRUD per la gestione dei Contatti.
  • HomeController
    • Questo Controller contiene l'Action per la pagina Demo, per il momento.

La cartella Core contiene tutte le Classi di base della Library.

  • Core => InCoreStartup

    Classe contenente i metodi di avvio dell'applicazione per le parti della Library.


La sottocartella Core\Classes contiene tutte le Classi relative a tutte le funzioni "Core" della Library.

  • Core => Classes => InCoreEmailProvider
    • Classe per la configurazione dei Provider di invio e-mail.
  • Core => Classes => InCoreIdentityErrorDescriber
    • Classe per la personalizzazione dei messaggi di errore di Identity (traduzione italiana).
  • Core => Classes => InCoreProject
    • Classe utilizzata per la lettura dei file di configurazione JSON per diversi Progetti (come per AP2).
  • Core => Classes => InCoreSession
    • Classe per la (FUTURA) gestione della Sessione utente.
  • Core => Classes => InCoreSettings
      Classe per la configurazione JSON dell'intero progetto.
  • Core => Classes => InCoreViewLocationExpander
    • Classe per espandere la ricerca delle Viste anche nelle cartelle Shared e SubLayouts.
  • Core => Classes => Attributes =>
    • Cartella contenente tutti i possibili attributi personalizzati per InCore.
      • InCoreBreadcrumb: Attributo che attiva la definizione di default delle Breadcrumbs a livello di Azione (Home > Controller > Action).
      • InCoreBreadcrumbNone: Attributo che disattiva la generazione delle Breadcrumbs a livello di Azione.
      • InCoreDT: Attributo che definisce una nuova DataTable a livello di Modello.
      • InCoreDTColumn: Attributo che definisce una colonna della DataTable a livello di proprietà del Modello.
      • InCoreSelect2: Attributo che definisce una Select2 a livello di Modello.
      • InCoreTrace: Attributo che definisce per quali metodi tracciare l'Azione che viene decorata nel Controller.
  • Core => Classes => Breadcrumbs =>
    • Cartella contenente le Classi per la gestione delle Breadcrumbs personalizzate.
      • InCoreBreadcrumbItem: Classe con i campi da definire per costruire le Breadcrumbs personalizzate.
  • Core => Classes => Calendars =>
    • Cartella contenente le Classi interne per la comunicazione con la libreria del Calendario.
      • InCoreCalendarDelta: Classe interna per gestire lo spostamento e il ridimensionamento dell'evento di Calendario.
      • InCoreCalendarReturnEvent: Classe interna che viene convertita in JSON per comunicare con la libreria JavaScript.
  • Core => Classes => Charts =>

    Cartella contente le Classi per la comunicazione con la libreria dei Grafici.

  • Core => Classes => DataTables =>
    • Cartella contenente le Classi interne per la comunicazione con la libreria delle DataTable.
      • InCoreDataTablesConfig: Configurazione globale della DataTable.
      • InCoreDTColumn: Configurazione di una singola colonna della DataTable.
      • InCoreDTColumnOrder: Configurazione dell'ordinamento a una singola colonna della DataTable.
      • InCoreDTConfiguration: Configurazione passata alla libreria delle DataTables.
  • Core => Classes => Errors =>

    Cartella contenente il Modello con i parametri di Errore per caricare la pagina di errore.

  • Core => Classes => Microsoft365 =>

    Cartella contenente il Modello per l'invio delle e-mail tramite Microsoft 365.

  • Core => Classes => Reports =>
    • InCoreReportsFiltriFromView: Classe di interscambio per passare e ricevere i Filtri per i Reports.
  • Core => Classes => Select2 =>
    • Cartella contenente le Classi interne per la comunicazione con la libreria Select2.
      • InCoreSelect2Config: Classe interna che raggruppa le altre in una singola configurazione.
      • InCoreSelect2Pagination: Classe interna che rappresenta la paginazione della Select2.
      • InCoreSelect2Value: Classe interna che rappresenta i valori della Select2.
  • Core => Classes => UI =>
    • Cartella contenente le Classi per gli oggetti dell'interfaccia utente.
      • InCoreButton: Classe con le informazioni per creare un pulsante.
      • InCoreMenuItem: Classe con le informazioni per creare un elemento di menù.
      • InCoreModal: Classe con le informazioni per creare una finestra Modale.
      • InCoreTabs: Classe con le informazioni per creare delle Tabulazioni.
      • InCoreViewModel: Classe con le informazioni da passare alle pagine per la configurazione degli elementi dell'interfaccia utente.

La sottocartella Core\Interfaces contiene tutte le Interfacce relative a tutti i Servizi "Core" della Library.

  • Core => Interfaces => IInCoreBreadcrumb

    Interfaccia per il servizio di gestione delle Breadcrumbs.

  • Core => Interfaces => IInCoreCompression

    Interfaccia per il servizio di gestione dei file zippati.

  • Core => Interfaces => IInCoreConfig

    Interfaccia per il servizio di lettura dei file JSON.

  • Core => Interfaces => IInCoreDataTables

    Interfaccia per il servizio di gestione delle DataTable.

  • Core => Interfaces => IInCoreEmailSender

    Interfaccia per il servizio di invio e-mail.

  • Core => Interfaces => IInCoreIdentity

    Interfaccia per il servizio di gestione degli Utenti e dei Ruoli.

  • Core => Interfaces => IInCoreMicrosoft365

    Interfaccia per il servizio di invio e-mail tramite Microsoft 365.

  • Core => Interfaces => IInCoreNotifier

    Interfaccia per il servizio di gestione delle Notifiche.

  • Core => Interfaces => IInCorePdf

    Interfaccia per il servizio di generazione dei PDF.

  • Core => Interfaces => IInCoreSelect2

    Interfaccia per il servizio di gestione delle Select2, con i metodi da implementare nei Controller.

  • Core => Interfaces => IInCoreServices

    Interfaccia per il servizio di gestione delle funzionalità di base.

  • Core => Interfaces => IInCoreTrace

    Interfaccia per il servizio di tracciamento delle Azioni.


La sottocartella Core\Implementations contiene tutte le Implementazioni relative a tutti i Servizi "Core" della Library.

  • Core => Implementations => InCoreBreadcrumb

    Implementazione per il servizio di gestione delle Breadcrumbs.

  • Core => Implementations => InCoreCompression

    Implementazione per il servizio di gestione dei file zippati.

  • Core => Implementations => InCoreConfig

    Implementazione per il servizio di lettura dei file JSON.

  • Core => Implementations => InCoreDataTables

    Implementazione per il servizio di gestione delle DataTable.

  • Core => Implementations => IInCoreEmailSender

    Implementazione per il servizio di invio e-mail.

  • Core => Implementations => InCoreIdentity

    Implementazione per il servizio di gestione degli Utenti e dei Ruoli.

  • Core => Implementations => InCoreMicrosoft365

    Implementazione per il servizio di invio e-mail tramite Microsoft 365.

  • Core => Implementations => InCoreNotifier

    Implementazione per il servizio di gestione delle Notifiche.

  • Core => Implementations => InCorePdf

    Implementazione per il servizio di generazione dei PDF.

  • Core => Implementations => InCoreSelect2

    Implementazione per il servizio di gestione delle Select2, con i metodi da implementare nei Controller.

  • Core => Implementations => InCoreServices

    Implementazione per il servizio di gestione delle funzionalità di base.

  • Core => Implementations => InCoreTrace

    Implementazione per il servizio di tracciamento delle Azioni.


La sottocartella Core\Statics contiene tutti i file statici della Library. I files sono tutti parte della partial class InCoreStatics ma sono stati divisi per argomento per facilità di lettura e separazione delle logiche.

  • InCoreStatics*: i files che compongono la partial class InCoreStatics.
  • InCoreLog: funzaionalità di logging.

La sottocartella Core\ValidationAttributes contiene tutti gli Attributi di Validazione personalizzati della Library.

  • InCoreCompare: Attributo di validazione per confrontare un campo con quello decorato.
  • InCoreEarlierThan: Attributo di validazione per verificare che una data sia precedente a quella decorata.
  • InCoreLaterThan: Attributo di validazione per verificare che una data sia successiva a quella decorata.
  • InCoreEmailAddress: Attributo di validazione per verificare che un campo sia un indirizzo e-mail valido.
  • InCoreRequired: Attributo di validazione per verificare che un campo sia obbligatorio.
  • InCoreMin: Attributo di validazione per verificare che un campo QUALUNQUE sia maggiore o uguale al valore inserito.
  • InCoreMax: Attributo di validazione per verificare che un campo QUALUNQUE sia minore o uguale al valore inserito.

Questa cartella contiene il Contesto per la Library con tutte le precedenti Migrazioni.

  • InCoreDbContext
    • Contesto contenente le tabelle della Library.

La cartella Core contiene i Modelli di base da cui derivano tutti gli altri.

  • Core => IInCoreBaseModel
    • Modello di base da cui derivano tutti gli altri. Al momento non contiene alcuna personalizzazione ma viene utilizzato per gestire determinate funzionalità nel progetto.
  • Core => InCoreBaseFileModel
    • Modello di base per le tabelle che gestiscono i files.
  • Core => InCoreConfigClaims
    • Modello della tabella in cui sono salvati i Permessi.
  • Core => InCoreIdentityUser
    • Modello per l'estensione della tabella degli Utenti.

Le sottocartelle nella cartella Core contengono i Modelli delle operazioni standard della Library.

  • Core => Admin =>
    • La cartella contiene i Modelli relativi alle funzioni Amministrative.
  • Core => Auth =>
    • La cartella contiene i Modelli relativi alle funzioni di Autenticazione.
  • Core => Binders =>
    • La cartelle contiene le gestioni personalizzate per i tipi di dati presenti nei Modelli dell'intero Framework.
  • Core => Calendar =>
    • La cartella contiene i Modelli base per la gestione del Calendario.
  • Core => Contact =>
    • La cartella contiene i Modelli per la gestione Contatti del sito.
  • Core => Logs =>
    • La cartella contiene i Modelli per il salvataggio degli errori di sistema.
  • Core => Reports =>
    • La cartella contiene i Modelli per la configurazione e il salvataggio dei Reports.

Questa cartella contiene tutti i Modelli standard della Library.

  • CalendarCategory
    • Modello per le Categorie del Calendario.
  • CalendarEvent
    • Modello per gli appuntamenti del Calendario.
  • Contact
    • Modello per il form di Contatto del sito.

La cartella contiene i file di Risorse che verranno usati in futuro per il multilingua. Al momento il file di Risorse contiene solamente le stringhe di errore per gli Attributi di Validazione personalizzati del Framework.

Questa cartella contiene tutti i Controller per i ViewComponent standard.

  • Breadcrumb
    • Componente che mostra le Breadcrumbs.
  • Contact
    • Componente che mostra il form di Contatto del sito.
  • InCoreDataTable
    • Componente che renderizza la DataTable con la nuova logica.
  • InCoreDT
    • Componente che renderizza la DataTable con la vecchia logica.
  • InCoreFileModal
    • Componente che renderizza la Dropzone all'interno di una Modale.
  • InCoreReports*
    • Componenti che renderizzano la pagina dei Reports, i suoi Filtri e i suoi Campi.

Questa cartella contiene tutte le Viste standard della Library.

  • CalendarEvent =>
    • Viste per gli appuntamenti del Calendario.
  • Contact =>
    • Viste relative al form di Contatto del sito.
  • Home =>
    • Viste standard per la root del sito, al momento solo la pagina Demo.
  • InCoreAdmin =>
    • Viste relative alle funzioni Amministrative.
  • InCoreAuth =>
    • Viste relative alle funzioni di Autenticazione.

La sottocartella Shared\Components contiene tutte le Viste per i Componenti configurati nella Library.


La sottocartella Shared\SubLayouts contiene tutti i Layout per l'impaginazione delle Viste.

  • Shared => SubLayouts => _InCoreActionLayout
    • Questo Layout contiene le Breadcrumbs, un titolo, un sottotitolo e la ossibilità di inserire pulsanti e altri controlli.
  • Shared => SubLayouts => _InCoreTabLayout
    • Questo Layout contiene i pulsanti e gli script Javascript necessari a far funzionare le InCoreTabs.
  • Shared => SubLayouts => _InCoreActionTabLayout
    • Questo Layout unisce i due precedenti.
  • Shared => SubLayouts => _InCoreModalTabLayout
    • Questo Layout gestisce le InCoreTabs nelle Modali. Usato principalmente per il cosiddetto "Wizard".

La cartella Shared contiene tutti i Layout standard e le Viste che compongono la struttura delle pagine del Framework.

  • _CoreBaseLayout
    • Layout base: contiene le librerie Javascript, i CSS, la finestra Modale, i campi per le Notifiche e l'icona di caricamento.
  • _EmptyLayout
    • Layout vuoto, usato per le Modali o le Viste Parziali.
  • _ModalOk
    • Layout vuoto, usato come risposta delle Modali, in modo che ci sia il tag DOCTYPE.
  • _PdfLayout
    • Layout vuoto, usato per l'esportazione in PDF.
  • _CoreFooterLayout
    • Layout che contiene solamente il Footer, usato principalmente per le schermate al di fuori del sito (come Login, Registrazione e simili).
  • _CoreTopLayout
    • Layout che imposta una grafica con il menù nella parte superiore e il Footer standard nella parte inferiore.
  • _CoreSideLayout
    • Layout di default, con il menù sulla sinistra, un Header con le informazioni relative all'utente in alto a destra e il Footer standard nella parte inferiore.
  • _MainSideMenu e _SideMenuItem
    • Queste Viste compongono il menù sulla sinistra.
  • _MainTopMenu e _TopMenuItem
    • Queste Viste compongono il menù in alto.
  • _LoginPartial
    • Vista contenente i dati dell'utente loggato e il menù in alto a destra.
  • _LanguageSwitcher
    • Vista vuota al momento, servirà per cambiare lingua quando introdurremo il multilingua.
  • _ValidationScriptsPartial
    • Vista di sistema, contiene script JS da includere in tutte le altre Viste.
  • Error
    • Pagina di errore standard.