Sono sicuro che questo è un requisito molto strano, ma qui va.Come posso generare una classe C# scaricabile da un sito Web ASP.NET MVC?
Abbiamo un codice di configurazione del cliente rappresentato dalle classi C# che compiliamo in una libreria di classi. La creazione di queste classi di configurazione è attualmente un lavoro sulle scimmie che vorrei assegnare a qualcuno che non sia uno sviluppatore. Stiamo quindi creando un sito web "Configurator" che un analista aziendale può utilizzare per generare classi C# valide compilando un modulo con le opzioni pertinenti selezionate.
Qual è il modo migliore per generare una classe C# da un modello in un sito Web MVC? Si noti che non sto parlando di generare dinamicamente ed eseguire una classe in fase di esecuzione: stiamo essenzialmente generando un file di testo che contiene solo codice C# che verrà incluso in un progetto completamente diverso.
Questo sta dimostrando di essere un argomento molto difficile per google correttamente! Le opzioni che sono venuti fin qui ...
- basta usare un file di testo in formato token e sostituire i valori utilizzando String.Format
- usare in qualche modo il rasoio come un motore di template (ma non è sicuro di come, e non è html siamo 'generazione ri)
- usare in qualche modo modelli T4 (almeno io so che è utilizzato per generare C#, ma non è sicuro come eseguire in fase di esecuzione)
Tutte le idee sul modo migliore per affrontare questo?
Come richiesto, ecco un esempio della classe di output/file. I valori qui sopra sostituiscono i valori impostati in una classe base con etichette specifiche del cliente, convalida, ecc. In questo modo personalizziamo il nostro prodotto per i clienti.
public class AreaRiskTemplate: AreaRiskTemplateBase
{
public override string EntityName { get { return "risk"; } }
public override string EntityNamePlural { get { return "risks"; } }
public override string EntityNameArticle { get { return "a"; } }
public override string CGovItemRefPrefix { get { return "R"; } }
public override void SetFieldDefinitions()
{
FieldDefinitions.Level1.IsImplemented = true;
FieldDefinitions.Level1.Label = "Category";
FieldDefinitions.Level1.IsVisibleInGrid = true;
FieldDefinitions.Level2.IsImplemented = true;
FieldDefinitions.Level2.Label = "Team";
FieldDefinitions.Level2.IsVisibleInGrid = true;
FieldDefinitions.Description.IsImplemented = true;
FieldDefinitions.Description.Label = "Description";
FieldDefinitions.Description.IsVisibleInGrid = true;
}
public override ModelStateDictionary Validate()
{
var msd = new ModelStateDictionary();
// add template-specific validation here
msd.Merge(base.Validate());
return msd;
}
public override List<string> Level1Options
{
get
{
return new List<string>
{
"Organisational",
"Financial",
"Operational",
"External",
"IT"
};
}
}
}
Aggiornamento: attualmente indagando modelli T4 a http://msdn.microsoft.com/en-us/library/ee844259(v=vs.100).aspx (grazie a commenti qui sotto). Sembra promettente.
http://msdn.microsoft.com/en-us/library/bb126445.aspx sembra includere dettagli su come iniziare con T4 in fase di esecuzione. –
Questo potrebbe anche essere di interesse: http://code.msdn.microsoft.com/windowsdesktop/Single-File-Generator-94d856d4 – Magrangs
Puoi pubblicare un esempio di come appare questo file di configurazione? –