Ho selezionato ServiceStack OrmLite per il mio progetto che è un'applicazione orientata ai dati pura. Sono disposto a consentire all'utente finale di creare i propri tipi di oggetto definiti in un formato XML che verrà utilizzato per generare classi in fase di esecuzione utilizzando CodeDOM.Aggiungi proprietà alla classe POCO in fase di esecuzione
Definirò anche alcuni oggetti "di sistema" richiesti dall'applicazione (ovvero User
) ma non posso prevedere tutte le proprietà che l'utente finale utilizzerà e pertanto sto cercando un modo per consentire di estendere le classi che creo in tempo di progettazione. Esempio muggito utente
public class User
{
public Guid Uid { get; set; }
public String Username { get; set; }
public String Password { get; set; }
}
La fine vuole avere un Email
ed un Address
. Egli deve essere in grado di aggiungere le 2 proprietà alla classe superiore e tutta la classe sarà (che comunque può essere utilizzato da OrmLite, in quanto consente di sovrascrivere:
public class User
{
public Guid Uid { get; set; }
public String Username { get; set; }
public String Password { get; set; }
public String Email{ get; set; }
public String Address { get; set; }
}
So che ci potrebbe essere un rischio di fare quindi per arrestare il sistema (se la classe è già istanziata), quindi sto cercando il modo migliore per evitare questo problema e imitare il bisogno.
Questo è in realtà molto vicino alla soluzione che ho trovato. Ho creato una classe 'Property' e' DataObjectType' con una relazione N <-> N. Ho quindi utilizzato il generatore di codice CodeDOM per creare un nuovo 'ExtensionAssembly' che creerà nuove classi utilizzando le proprietà di estensione delle tabelle sopra. Ho allegato ExtensionKey come guida per ciascun tipo originale utilizzato dai nuovi tipi corrispondenti come identificatore. –
L'escape del conflitto di denominazione è facile come aggiungere un prefisso o un suffisso ai nuovi tipi creati, ad esempio "Utente" e "UserExtension". –