Omnia.AutoCodeGenerator 9.0.0

dotnet tool install --global Omnia.AutoCodeGenerator --version 9.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local Omnia.AutoCodeGenerator --version 9.0.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Omnia.AutoCodeGenerator&version=9.0.0
                    
nuke :add-package Omnia.AutoCodeGenerator --version 9.0.0
                    

ControllerGenerator

Generatore automatico di codice per creare Controller, Service, Repository e classi correlate basate su modelli Entity Framework.

Installazione

Da NuGet (Raccomandato)

# Installa come CLI tool globale
dotnet tool install --global Omnia.AutoCodeGenerator

# Usa il comando
autocodegen -f "path/to/config.json"

Da Sorgente

# Clona il repository
git clone <repository-url>
cd ControllerGenerator

# Esegui direttamente
dotnet run -- -f "path/to/config.json"

Prerequisiti

  • .NET 8.0 o superiore
  • Modelli Entity Framework già generati

Utilizzo

Con CLI Tool (NuGet)

autocodegen -f <path-to-config.json>

Con Sorgente

dotnet run -- -f <path-to-config.json>

Esempio di Utilizzo

# Con CLI tool
autocodegen -f "C:\path\to\your\config.json"
autocodegen -f "..\TestAPI\CodeGenerator.json"

# Con sorgente
dotnet run -- -f "C:\path\to\your\config.json"
dotnet run -- -f "..\TestAPI\CodeGenerator.json"

Configurazione JSON

Il generatore utilizza un file di configurazione JSON per specificare i percorsi di input e output e le opzioni di generazione.

Esempio di Configurazione Completa

{
  "NamespaceModels": "Test.Models",
  "OverwriteExistingFiles": true,
  "RepositoryInterfaceGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\Interfaces\\Repository\\",
    "Namespace": "TestGenerated",
    "Usings": ["InterfaceUtility.GenericInterfaces"]
  },
  "ServiceInterfaceGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\Interfaces\\Service\\",
    "Namespace": "TestGenerated",
    "Usings": ["InterfaceUtility.GenericInterfaces"]
  },
  "UpperServiceInterfaceGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\Interfaces\\UpperService\\",
    "Namespace": "TestGenerated",
    "Usings": ["InterfaceUtility.GenericInterfaces"]
  },
  "ServiceGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\",
    "Namespace": "TestGenerated",
    "Usings": ["Utility.ServiceRepository"]
  },
  "ServiceBeforeGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\",
    "Namespace": "TestGenerated",
    "Usings": ["InterfaceUtility.GenericInterfaces"]
  },
  "ServiceAfterGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\",
    "Namespace": "TestGenerated",
    "Usings": ["InterfaceUtility.GenericInterfaces"]
  },
  "RepositoryGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\",
    "Namespace": "TestGenerated",
    "Context": "TestContext",
    "RepositoryBaseClass": "GenericRepository",
    "Usings": ["GenericImplementation.Service"]
  },
  "UpperServiceGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\Test\\Generated\\",
    "Namespace": "TestGenerated",
    "Usings": ["GenericImplementation.Service"]
  },
  "ControllerGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\TestAPI\\Controllers\\",
    "Namespace": "TestGenerated",
    "Usings": [
      "InterfaceUtility.GenericInterfaces",
      "Microsoft.AspNetCore.Authorization",
      "Microsoft.AspNetCore.Mvc",
      "Utility.GenericControllerImplementation"
    ]
  },
  "DependencyInjectionGen": {
    "InputModelsFolder": "C:\\...\\Test\\Models\\",
    "OutputFolder": "C:\\...\\TestAPI\\",
    "Namespace": "TestGenerated",
    "TypeDependency": "Scoped"
  },
  "SwaggerAuthenticationGen": {
    "OutputFolder": "C:\\...\\TestAPI\\Extensions\\",
    "Namespace": "TestGenerated"
  }
}

Parametri di Configurazione

Parametri Globali

Parametri Globali

Campo Tipo Obbligatorio Descrizione
NamespaceModels string Namespace dei modelli Entity Framework
OverwriteExistingFiles bool Se true, sovrascrive i file esistenti. Default: false

Blocchi Generatori

Ogni blocco (es. ServiceGen, RepositoryGen, ControllerGen, ecc.) accetta:

Campo Tipo Obbligatorio Descrizione
InputModelsFolder string Cartella contenente i modelli EF
OutputFolder string Cartella di output per i file generati
Namespace string Namespace per i file generati
Usings string[] Array di usings da includere nei file
Context string Solo RepositoryGen Nome della classe DbContext
RepositoryBaseClass string Solo RepositoryGen Base class per i repository
TypeDependency string Solo DependencyInjectionGen Tipo di dependency injection

Note: I generatori di interfaccia (RepositoryInterfaceGen, ServiceInterfaceGen, UpperServiceInterfaceGen) sono indipendenti e accettano solo i parametri sopra.

Gestione Sovrascrittura File

Il generatore supporta due modalità per la gestione dei file esistenti:

Modalità Default (Sicura)

{
  "NamespaceModels": "YourProject.Models",
  // OverwriteExistingFiles assente o false
}
  • ✅ I file esistenti NON vengono sovrascritti
  • ✅ Mostra [SKIP] filename.cs esiste già.
  • ✅ Sicuro per le modifiche manuali

Modalità Sovrascrittura

{
  "NamespaceModels": "YourProject.Models",
  "OverwriteExistingFiles": true
}
  • ⚠️ I file esistenti VENGONO sovrascritti
  • ⚠️ Mostra [OVERWRITE] filename.cs sovrascritto.
  • ⚠️ Le modifiche manuali verranno perse

Messaggi di Output

Durante l'esecuzione, il generatore mostra messaggi informativi:

  • [CREATE] filename.cs creato. - Nuovo file creato
  • [SKIP] filename.cs esiste già. - File esistente non sovrascritto
  • [OVERWRITE] filename.cs sovrascritto. - File esistente sovrascritto

Struttura File Generati

Per ogni modello Customer, il generatore crea:

Controllers

CustomerController.cs

Services

// Interfaces
ICustomerService.cs
ICustomerServiceBefore.cs
ICustomerServiceAfter.cs
ICustomerUpperService.cs

// Implementations
CustomerService.cs
CustomerUpperService.cs

Repositories

// Interface
ICustomerRepository.cs

// Implementation
CustomerRepository.cs

Interfacce Generiche

// RepositoryInterfaceGen
ICustomerRepository.cs

// ServiceInterfaceGen
ICustomerService.cs

// UpperServiceInterfaceGen
ICustomerUpperService.cs

Extensions (SwaggerAuthenticationGen)

SwaggerAuthenticationExtensions.cs

Contiene i seguenti extension methods:

  • AddSwaggerWithAuthentication() - Configura Swagger/OpenAPI con JWT Bearer
  • AddPermissiveAuthentication() - Autenticazione permissiva per sviluppo
  • UseSwaggerWithUI() - Configura Swagger UI personalizzabile

Esempio di utilizzo in Program.cs:

// Aggiungi servizi
builder.Services.AddSwaggerWithAuthentication(
    title: "My API",
    version: "v1", 
    description: "API Documentation"
);
builder.Services.AddPermissiveAuthentication();

// Configura pipeline
app.UseSwaggerWithUI(
    title: "My API Documentation",
    version: "v1",
    routePrefix: "" // Swagger alla radice
);
app.UseAuthentication();
app.UseAuthorization();

Esempio Pratico

  1. Preparare i modelli EF in una cartella (es. Models/)
  2. Creare il file di configurazione config.json
  3. Eseguire il generatore:
    dotnet run -- -f config.json
    
  4. Verificare i file generati nelle cartelle specificate

Note Importanti

  • Il generatore esclude automaticamente i file che contengono "Context" nel nome
  • Tutti i percorsi devono essere assoluti
  • Le cartelle di output vengono create automaticamente se non esistono
  • La compatibilità è garantita con file JSON esistenti (retrocompatibile)

Risoluzione Problemi

Errore: "File non trovato"

Verificare che il percorso del file JSON sia corretto e accessibile.

Errore: "Campo XXX non può essere nullo"

Verificare che tutti i campi obbligatori siano presenti nel JSON.

File non generati

Verificare che:

  • La cartella dei modelli contenga file .cs
  • I percorsi di output siano scrivibili
  • Non ci siano conflitti di permessi

Help

Per visualizzare l'help:

dotnet run -- --help
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
9.0.0 90 1/9/2026
1.1.1 343 11/17/2025
1.1.0 193 10/20/2025
1.0.1 320 9/16/2025
1.0.0 318 9/16/2025

README aggiornato e verificato, esempi CLI e JSON completi, documentazione SwaggerAuthenticationGen inclusa. Versione 1.1.1.