Se questo è tutto ciò che hai e non è pratico / fattibile avere un'unica fonte di verità comune per generare i tuoi diversi artefatti, potresti trovare utile la funzione di template T4.
Ad esempio, supponiamo che "Dummy" sia il progetto della libreria di classi del tuo modello nella stessa soluzione, con, diciamo, in Dummy.cs:
namespace Dummy
{
public class Something
{
public int Id { get; set; }
public string Name { get; set; }
}
public class SomethingElse
{
public int Id { get; set; }
public string Name { get; set; }
}
}
Quindi, nella tua libreria di classi del modello di visualizzazione, puoi utilizzare
di Visual Studio
"Aggiungi > Nuovo elemento ... > Elementi Visual C # > Modello di testo"
da aggiungere, in "ViewModel.tt":
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="$(SolutionDir)\Dummy\bin\Debug\Dummy.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ import namespace="Dummy" #>
<#
// choose a convenient "anchor type" from your model, e.g., a base class or enum type, etc
var model = typeof(Dummy.Something).Assembly.GetTypes();
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DummyViewModels
{
<# foreach (var type in model) { #>
public class <#= type.Name #>ViewModel
{
<# foreach (var property in type.GetProperties()) { #>
public <#= property.PropertyType.Name #> <#= property.Name #> { get; set; }
<# } #>
}
<# } #>
}
che dovrebbe produrre, dopo "fare clic con il tasto destro > Esegui strumento personalizzato" sul "ViewModel.tt" (nello stesso progetto), il seguente "ViewModel.cs":
namespace DummyViewModels
{
public class SomethingViewModel
{
public Int32 Id { get; set; }
public String Name { get; set; }
}
public class SomethingElseViewModel
{
public Int32 Id { get; set; }
public String Name { get; set; }
}
}
'Spero che questo aiuti.